动态数组存储输出

比如求1000内完数的问题
完数 即该数的所有因子之和等于它本身 如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 ; } } }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值