比如求1000内完数的问题
完数 即该数的所有因子之和等于它本身 如6=1+2+3 用程序写一个求完数的程序 只需进行2次循环 比求质数的要难一点
课本只要求找到完数 那么程序会很容易写出来
但是如果想打印出完数的具体内容呢?比如要显示“6=1+2+3”
很容易想到的方法就是把1,2,3存入数组中 但是数组的长度是多少呢?
那么也许应该 先定义一个长度较大的数组 进行一次循环 找到数组存储值最大的下标值 求和数组判断是否是完数 然后再进行一次循环 将数组输出
这样做会非常麻烦 程序很繁琐 例如
对此虽然实现了想要的结果 但程序不能令我们满意 有没有更好的办法呢?
集合类中的接口为我们提供了方法 关键字:Vector;Enumeration
Vector类提供了类似动态数组的功能 但是它只能对对象进行操作 不过我们可以利用简单的数据类型转换来运用Vector类
然后通过Enumeration接口来实现动态数组的读取操作 这样我们只需要一次循环就可以完成数组的存储 无需判断数组的最大有效下标了
完数 即该数的所有因子之和等于它本身 如6=1+2+3 用程序写一个求完数的程序 只需进行2次循环 比求质数的要难一点
课本只要求找到完数 那么程序会很容易写出来
-
Java code
- public class ws{ public static void main(String []args) { int sum=0; for(int i=1;i<1000;i++) { for(int j=1;j<=i/2;j++) { if(i%j==0) { sum+=j; } } if(sum==i) { System.out.println(i); } sum=0; } } }
但是如果想打印出完数的具体内容呢?比如要显示“6=1+2+3”
很容易想到的方法就是把1,2,3存入数组中 但是数组的长度是多少呢?
那么也许应该 先定义一个长度较大的数组 进行一次循环 找到数组存储值最大的下标值 求和数组判断是否是完数 然后再进行一次循环 将数组输出
这样做会非常麻烦 程序很繁琐 例如
-
Java code
- public class ws{ public static void main(String[] args) { int a,i,j=0,k=0,l,s=0; int[] e; for(a=1;a<=1000;a++) { for(i=1;i<=a/2;i++) { if(a%i==0) { // System.out.println(i+"是"+a+"的因数"); k++; if(i>=a/2-1){ e=new int[100]; for(i=1;i<=a/2;i++) { if(a%i==0) { e[j]=i; //System.out.println("e["+j+"]的值为"+e[j]); j++; } //j=0; } for(l=0;l<=j;l++) { s+=e[l]; } if (s==a) { System.out.println(a+"是个完数"); System.out.print(a+"=1"); for(l=1;l<=j-1;l++) { System.out.print("+"+e[l]); } System.out.println(); } s=0; j=0; } } } // System.out.println("除"+a+","+a+"的因数有"+k+"个"); k=0; } } }
对此虽然实现了想要的结果 但程序不能令我们满意 有没有更好的办法呢?
集合类中的接口为我们提供了方法 关键字:Vector;Enumeration
Vector类提供了类似动态数组的功能 但是它只能对对象进行操作 不过我们可以利用简单的数据类型转换来运用Vector类
然后通过Enumeration接口来实现动态数组的读取操作 这样我们只需要一次循环就可以完成数组的存储 无需判断数组的最大有效下标了
-
Java code
- import java.util.*; public class Zxzjava3 { public static void main(String []args) { final int total=1000; int sum=0; Vector v=new Vector(); for(int i=1;i<total;i++) { for(int j=1;j<=i/2;j++) { if(i%j==0) { v.addElement(new Integer(j)); } } Enumeration e=v.elements(); while(e.hasMoreElements()) { Integer intObj=(Integer)e.nextElement(); //System.out.println(intObj); sum+=intObj.intValue(); } if (sum==i) { System.out.println(i+"是个完数"); Enumeration f=v.elements(); System.out.print(i+"="+"1"); while(f.hasMoreElements()) { Integer intObj=(Integer)f.nextElement(); if(intObj.intValue()==1) { } else System.out.print("+"+intObj.intValue()); } System.out.println(); } v.clear(); sum=0; } } }