| 
 
| 本帖最后由 Sheng.cn 于 2015-4-30 22:15 编辑 
 刚看到这题的时候有了思路,想了一个较为麻烦的做法,不过能做出来;由于当时没审好题所以没出来结果,刚才一看题恍然大悟,两种方法如下:
 题目  :::  一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3。找出10000以内的所有完数.。
 
 
 方法一: 最初的想法
 /*
 思路:           1;查找范围为1~10000  用for循环
 2; 需要求出每一个数的所有因子
 3; 找出符合因子之和等于这个数的数
 */
 class WanShu
 {
 public static void main(String[] args)
 {
 for (int x =1;x<=10000 ;x++ )
 {
 int [] arr= new int[10000];      //数组的长度为一万,肯定够用 ,存放因子数
 int pos = 0;             //表示数组的 角标 ,将来从第一个角标位开始存放
 
 for (int yin = 1;yin < x ;yin++ )
 {
 if (x%yin==0)     //求x 的所有因子
 {
 arr[pos++]=yin;
 }
 }
 
 int sum=0;
 for (int a=0;a<arr.length ;a++ )
 {
 sum+=arr[a];  //计算因子的和
 }
 if (sum==x)     //判断是否为完数
 {
 System.out.println(x);
 }
 }
 }
 
 }
 
 上述方法较为麻烦,其实直接求出满足条件 的因子和即可,不用将因子放在数组中,下面为突然想起来的另一种方法,超简单:
 
 方法二::
 
 class WanShu1
 {
 public static void main(String[] args)
 {
 for (int x= 1;x<=10000 ;x++ )
 {
 int sum = 0;
 for (int yin=1;yin<x ;yin++ )
 {
 if (x%yin==0)
 {
 sum +=yin;
 }
 }
 
 if (sum ==x)
 System.out.println(sum);
 }
 
 }
 }
 
 
 
 
 
 | 
 |