当前位置: 代码迷 >> J2SE >> 题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "例如6=1+2+3.编程 找出1000以内的所有完数。该如何解决
  详细解决方案

题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "例如6=1+2+3.编程 找出1000以内的所有完数。该如何解决

热度:711   发布时间:2016-04-24 01:56:04.0
题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如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+" ");                }            }        }}
  相关解决方案