黑马程序员技术交流社区

标题: c,共同学学,帮纠错 [打印本页]

作者: 万里天    时间: 2015-3-2 15:57
标题: c,共同学学,帮纠错
9、 一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3. 编程找出999以内的所有完数。(C语言)

思路分析
        假如整数n除以m,结果是无余数的整数,那么我们称m就是n的因子。
       
#include <studio.h>
int main ()
{   
        //外层循环,表示要判断的当前数
    for(int i=1;i<1000;i++)
    {
        int count=0;//当前因子之和
        //寻找当前数的所有因子并求和
//如果循环从1开始,那么count中也会加上其本身,如果该数十完数,那么最后的count是其2倍
        for(int j=1;j<i/2;j++)
        {
            if(i%j==0)//如果i于j模运算结果为0,那么j和i/j就是i的因子
            {
                count+=j+i/j;//当前所知的所有i的因子之和
               }
        }
        if(i*2==count)//如果所有因子之和(加上该数本身)是其二倍,则该数也是完数,
        {
            printf("%d ",i);//打印完数
        }
    }
}

作者: xiezhongmin    时间: 2015-3-2 18:50
修正后的代码:
#include <stdio.h>

int main ()
{  

        int i,j,sum;
        for (i=1; i<1000; i++)
        {
                sum = 0;
                for (j=1; j<i; j++)
                {
          if (i%j==0)
                  {
                          sum = sum+j;
                  }
                }
        if (sum == i)
                {
           printf("%d\n",i);
                }

        }


        return 0;
}
作者: 万里天    时间: 2015-3-2 22:34
xiezhongmin 发表于 2015-3-2 18:50
修正后的代码:
#include

哪一个好点,为什么?
作者: 万里天    时间: 2015-3-2 22:35
xiezhongmin 发表于 2015-3-2 18:50
修正后的代码:
#include

我写的有错嘛?错在哪里?
作者: xiezhongmin    时间: 2015-3-3 08:14
先运行程序,看看结果,然后想想逻辑上哪点有错误
作者: 万里天    时间: 2015-3-3 12:18
xiezhongmin 发表于 2015-3-3 08:14
先运行程序,看看结果,然后想想逻辑上哪点有错误

结果不对,哈哈




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2