日期:2014-05-20  浏览次数:20723 次

题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程 找出1000以内的所有完数。
问题出在哪儿了?求大家帮忙,我是在找不到了,该怎么改进,在线等=====
Java code
/*题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程   找出1000以内的所有完数。   
*/

public class End1{
    public static void main(String[]args){
        for(int i = 0;i<=1000;i++){
            int arr[] = new int[i];
            for(int j = 1;j < i;j++){
                if(i%j == 0){
                    int k = 0;
                    arr[k] = j;
                    k++;
                }
            }
            int temp = 0;
            for(int m = 0; m<arr.length;m++){
                temp += arr[m];
            }
            if(i == temp){
                System.out.print(i+" ");
            }
        }
    }
}




------解决方案--------------------
public class End1{
public static void main(String[]args){
for(int i = 0;i<=1000;i++){
int arr[] = new int[i];
int k = 0;
for(int j = 1;j < i;j++){
if(i%j == 0){
arr[k] = j;
k++;
}
}
int temp = 0;
for(int m = 0; m<arr.length;m++){
temp += arr[m];
}
if(i == temp){
System.out.print(i+" ");
}
}
}
}


------解决方案--------------------
int k = 0;放在for(int j = 1;j < i;j++)这个循环前面,你每次都先k=0,改变的一直都是arr[0],数组其他值也一直是0
------解决方案--------------------
这个比较简单
Java code


public class End1{
    public static void main(String[]args)
     {
        for(int i = 0;i<=1000;i++)
            {
             int s=0;
             for(int j = 1;j < i;j++)
               {
                if(i%j == 0)
                    {
                 s+=j;                  
                    }
                }
             if(s==i)
                {
                System.out.print(i+" ");
                }
            }
        }
}