黄泥岭村:C语言“完数”问题

来源:百度文库 编辑:高校问答 时间:2024/05/08 18:59:08
#include "stdafx.h"

void main(int argc, char* argv[])
{int x,a,b=0;
for(x=6;x<1000;x++)
{for(a=1;a<x;a++)
{if(x%a==0)
b=b+a;}
if(b==x)
printf("%d\n",x);}

} 一个数是其因子的和称为“完数”,如6=1+2+3 求1000以内的完数,这个程序为什么结果是6和7啊

void main(int argc, char* argv[])
{
int x,a,b=0;
for(x=6;x<1000;x++)
{
b=0; //你退出内圈循环后忘了重置0了
for(a=1;a<x;a++)
{
if(x%a==0)
b=b+a;
}
if(b==x)
printf("%d\n",x);
}
}
这样就好了。看注释

结果是6 28 496

艾斯尼勒 的为正确解。
单n=7的时候只有一个小于7的因子1,而这时候b=6;
b=b+a就得到b=7;(b==x)就为1,执行printf;
所以有7输出;

楼上正解~