你没有注意循环重置这个问题,这个问题今天我也犯错了,因为我今天也编了一个这样的程序;还有一定,我不知道你定义max有什么作用
这是我的源文件
#include <stdio.h>
void main()
{
int i,j,sum,n;
int a[100];
for(i=1;i<1000;i++)
{
n=0;
sum=0;
for(j=1;j<i;j++)
{
if(i%j!=0)
continue;
else
{
a[n++]=j;
sum=sum+j;
}
}
a[n]='\0';
if(sum==i)
{
printf("%3dits factors are 1",i);
for(j=0;a[j]='\0';j++)
{
printf(",%d",a[j]);
}
printf("\n");
}
}
printf("\n");
}
这个程序不仅可以输出1000以内的完数,而且可以输出完数的因子;
如果你不想用数组的话,用下面的源文件也可以,不过效率会低点。
#include <stdio.h>
void main()
{
int m,s,i;
for(m=2;m<1000;m++)
{
s=0;
for(i=1;i<m;i++)
if(m%i==0)
s=s+i;
if(s==m)
{
printf("%4d,its factors are",m);
for(i=1;i<m;i++)
if(m%i==0)
printf("%5d",i);
printf("\n");
}
}
}
还有你的输出格式没必要这样,1000以内的完数只有3个,所以你的格式控制语句没有实际意义。