c语吧 关注:409贴子:550
  • 1回复贴,共1
#include<stdio.h>
main()
{
int a,n,sum=0;
for(a=1;a<=100;a++)
{ sum=0;
for(n=1;n<a;n++)
if(a%n==0)
sum+=n;
if(sum==a)
printf("%d是一个完数",a);
}
}
为何当我不输入第一个for下面的sum=0时无法得到答案
求大神教我 小弟谢过了


1楼2015-04-14 17:05回复
    因为sum的用处是将所得的约数进行相加,然后将相加的值进行判断。当判断结束后,sum的值必须要归零,如果不归零那么它还是会保持上一次的值,这样就永远求不出完数了。
    根据你的程序我们可以举一个例子:
    当a=2时(我觉得你的a初始值可以改为2,因为你下面已经说明n<a,所以a不应该与n同值,因为这样当a=1时的那段程序是不会执行的。)
    继续上面的
    当a=2时,我们根据你的程序可以得到sum=1;
    当a=3时,我们根据你的程序可以得到sum=1;
    当a=4时,我们根据你的程序可以得到sum=1+2;
    当a=5时,我们根据你的程序可以得到sum=1;
    当a=6时,我们根据你的程序可以得到sum=1+2+3;(这时找出了第一个完数。)
    上面的答案都是基于将sum在第一个for循环下归零的结果,那不归零又是怎么样的呢,我们继续来看:
    当a=2时,我们根据你的程序可以得到sum=1;
    当a=3时,我们根据你的程序可以得到sum=1+1;
    当a=4时,我们根据你的程序可以得到sum=2+1+2;
    当a=5时,我们根据你的程序可以得到sum=5+1;
    当a=6时,我们根据你的程序可以得到sum=6+1+2+3;
    ……
    这样就得不到完数了。
    所以不将sum归零,那么它的值总是是上一个sum的值,正因为这样后就没有找到完数了,所以结果才不会输出什么


    2楼2015-04-25 11:28
    回复