#include<stdio.h>
int main()
{
int n,i,k,sum=0;
scanf("%d",&n);
for(i=2;i<=n;i++)
{
for(k=1;k<i;k++)
{
if(i%k==0){
sum=sum+k;
if(sum==i){
printf("%d\n",i);
}
}
}
sum=0;
}
return 0;
}
你的求完数的C语言程序,我帮你改好了,你看看吧(改动的地方及原因见注释)
#include<stdio.h>
int main()
{
int n,i,k,sum=0;
scanf("%d",&n);
for(i=2;i<=n;i++)
{
for(k=1;k<i;k++)
{
if(i%k==0){
sum=sum+k;
}
}
if(sum==i){//把if(sum==i)语句块移到for-k循环外,让程序找到所有因子再判断是否是完数,否则找到一部分因子等于i的数如24=1+2+3+4+6+8(少一个因子12)也被打印出来
printf("%d\n",i);
}
sum=0;
}
return 0;
}