C语言求1000内的完数出错

#include<stdio.h>
main()
{ int m,i,sum;
for(m=1;m<=1000;m++)
{ sum=0;
for(i=1;i<m;i++)
{ if(m%i==0)
sum=sum+i;
if(sum==m)
printf("%d ",sum);}
}
}

编程如上 为什么会出错 出错多输出二四 而且重复输出 6 28 496

#include<stdio.h>/*****你写的不好看,整理了一下^.^*****/
main()
{ int m,i,sum;
for(m=1;m<=1000;m++)
{
sum=0;
for(i=1;i<m;i++)
if(m%i==0) sum=sum+i;
if(sum==m) printf("%d ",sum);/*****这里错了,该句拿出for循环就可以了*****/
}
}
/********之所以出24是因为:1,2,3,4,6,8,12当循环到8的时候1+2+3+4+6+8=24,满足你的条件就输出24,虽然还没完成!********/
/************再讲讲为什么会循环输出:6有1,2,3三个因子,6%3=2,此时sum=sum+i满足,输出6!!!i=4,5,6时sum=sum+i还是满下次!输3次6;28有1,2,4,7,14,当i=14满足后15,16,17....28都满足sum=sum+i,就输出28-13=15次!!!496同理!***************/

不知明白了没有?
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-12-01
把sum=0 移到第三级大括弧内呢?

我也不太懂~ 感觉问题是出在
{ sum=0;
for(i=1;i<m;i++)
{ if(m%i==0)
sum=sum+i;
if(sum==m)
这部分
相似回答