出错的源程序如下:
public class test3 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("1000内的完数为: ");
int s=0,r=0,n=1000;
for(int i=1;i<n;i++)
{
for(int j=1;j<i;j++)
{
if(i%j==r)
{
s=s+j;
}
}
if(s==i)
{
System.out.print(i+" ");
}
}
}
}
该程序存在的问题:
求不出1000以内的完数。
解决的方法:
1.内层for循环完之后,s应重新清零,开始计算下一个数的所有因子的和。
2.在两层for循环之间加一个语句:s = 0 ; 目的是计算完一个数的完数后,s清零并等待计算下一个数的所有因子的和。
改正后的程序为:
public class Test_3 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("1000内的完数为: ");
int s=0,r=0,n=1000;
for(int i=1;i<n;i++)
{
s=0;
for(int j=1;j<i;j++)
{
if(i%j==r)
{
s=s+j;
}
}
if(s==i)
{
System.out.print(i+" ");
}
}
}
}
运行结果:
经验积累:
1.要注意每一个小的细节。