#include <stdio.h>
#include <math.h>//这个不用写 用不到!
void main()
{
int x,y,n,m=0;//m要在第一个for循环里面重新赋值为0;因为第二个for循环进行完后m的值发生了变化;要重新赋值为0后在进行下一个数值的判断!不然的话m相当于是2到100的和!不知表达是否清楚!
y=x/2;在第一个for循环里面写上,因为第一个for循环开始后x才有了赋值!
for(x=2;x<=100;x++)
{
for(n=1;n<=y;n++)
{
if(x%n==0)
m+=n;
}
if(x==m)
printf("%d是完数",x);
}
}
看看改进的:
#include <stdio.h>
void main()
{
int x,y,n,m;
for(x=2;x<=1000;x++)
{
m=0;
for(n=1;n<=x/2;n++)
if(x%n==0)
m+=n;
if(x==m)
printf("%3d是完数\n",x);
}
}