首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-02-09 
接上回贴子,最后一步了。各位帮忙!题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如61+2+3.

接上回贴子,最后一步了。各位帮忙!
题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如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

热点排行