本帖最后由 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);
}
}
}
|
|