求n以内的所有完数,哪里错了,多出几个数字

#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;

}

温馨提示:答案为网友推荐,仅供参考
相似回答