完数(5分)
题目内容:
一个正整数的因子是所有可以整除它的正整数。而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如6=1+2+3(6的因子是1,2,3)。
现在,你要写一个程序,读入两个正整数n和m(1<=n<m<1000),输出[n,m]范围内所有的完数。
注意:虽然题目要求m<1000,但是在测试中老是会有一个测试不通过,最后发现需要m可以等于1000,小细节。
package couredesign;
import java.util.Arrays;
import java.util.Scanner;
public class wanshu {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int m = in.nextInt();
int[] ws = new int[200];
int count = 0;
if ((n<m)&(n>=1)&(m<=1000))
{
for(int i=n;i<=m;i++)
{
int[] zys = new int[1000];
for(int k=1;k<i;k++)
{
if(i%k==0)
{
zys[k-1] = k;
}
}
int sum =0;
for(int h=0;h<zys.length;h++)
{
sum = sum+zys[h];
}
if (sum==i)
{
ws[count] = i;
count ++;
}
}
// System.out.println(Arrays.toString(ws));
for(int i=0;i<ws.length;i++)
{
if((ws[i]!=0) & (ws[i+1]!=0))
{
System.out.print(ws[i]+" ");
}
else if((ws[i]!=0) & (ws[i+1]==0))
{
System.out.print(ws[i]);
}
else
{
System.out.print("\n");
break;
}
}
}
else
{
System.out.print("\n");
}
}
}