分析:
1、完数:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如:6=1+2+3
2、1000以内的数:要利用for语句:
for(i=1;i<=1000;i++)
3、判断完数:
要用i%1-1000,如果结果为0,则此时1-1000里面的数为因子,接着将这些因子相加,结果等于i即为完数。
for(j=1;j<i;j++)
{
if(i%j==0)
s+=j;
}
4、要注意,s是不同j的和,所以当我们判断完之后,要将s从新变成0,否则它就会一直累加
整体代码:
#include<>
int main()
{
int i,j,s=0;
for(i=1;i<=1000;i++)
{
s=0;
for(j=1;j<i;j++)
{
if(i%j==0)
s+=j;
}
if(i==s)
printf("%d ",i);
}
prinf("\n");
}
同时我们可以用反向思维来考虑这道题
我们可以将s=s-i;比如:6-3-2-1=0,所以只要s=0,那么我们所找的这个数是完数。
#include<>
int main()
{
int i,j,s;
for(j=1;j<=1000;j++)
{
s=j;
for(i=1;i<j;i++)
{
if(j%i==0)
s=s-i;
}
if(s==0)
printf("%d ",j);
}
printf("\n");
}