潭老师C语言教材上的一道题 用循环语句实现
一个数如果恰好等于它的因子之和 称为"完数"
如 6的因子为1,2,3 6=1+2+3. 要求输出1000以内的所有完数
请达人帮忙分析下下面的程序有何问题 并给出正确解答 感激不尽
main()
{
int i,m,t=0,n=0;
for(m=1;m<=1000;m++)
{
for(i=1;i<m;i++)
{
if(m%i==0)
{
t=t+i;
if(t==m)
printf("%d,",m);
}
}
}
}
为何输出结果是: 1,2,
???
參考答案:程序有两个小的不足:
第一,循环时 t 未清0
第二,打印应在中间循环外
代码更正如下:
-------------
main()
{
int i,m,t=0,n=0;
for(m=1;m<=1000;m++)
{
t=0;
for(i=1;i<m;i++)
{
if(m%i==0)
{
t=t+i;
}
}
if(t==m)
printf("%d,",i);
}
}