读书人

接上回贴子最后一步了。各位帮忙!解

发布时间: 2012-02-09 18:22:27 作者: rapoo

接上回贴子,最后一步了。各位帮忙!
题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。
——————————————————————————

以下是我写的一个程序,不过并非题中所述,我的这个还仅限于自已输入一个数,来判断是否是完数,我的想法是在前面加一个for循环来控制目前的这个c,在不加这个循环前,输入一个数可以正确判断他是否是一个完数,可加上之后,在5以前还输出正常,到6就错了,麻烦各位帮忙找下原因
原贴地址:http://community.csdn.net/Expert/TopicView3.asp?id=5675717
——————————————————————

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int n,i,sum=0,b,c;  //c为输入的一个数,sum是c因数的和,n是为防止改变c的原值而做的一个临时变量
/*for (c=2;c <=10;c++)  //这里是我想的循环控制,可还是没成功
{*/


scanf ( "%d ",&c);
printf ( "%d= ",c);
n=c;
for (i=2;i <=(int) sqrt(n);i++)    //打出输入数的因数循环
{
while (n!=i)
{
if (n%i==0)
{
printf ( "%d* ",i);
n/=i;
sum+=i;
}
else


break;
}

}
printf ( "%d ",n);
printf ( "\nsum=%d ",sum+n+1);
b=sum+n+1;
if (b==c)         //此处开始判断是否是完数
printf ( "\n%d is perfect number\n ",c);


else
printf ( "\n%d is not perfect number\n ",c);


system ( "PAUSE ");
return 0;
}

[解决办法]
for (i=2;i <=(int) sqrt(n);i++)

因数 可能大于 sqrt(n)。
比如 6 的因数 3

读书人网 >C语言

热点推荐