A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 万里天 中级黑马   /  2015-3-2 15:57  /  1039 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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);//打印完数
        }
    }
}

5 个回复

倒序浏览
修正后的代码:
#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;
}
回复 使用道具 举报
xiezhongmin 发表于 2015-3-2 18:50
修正后的代码:
#include

哪一个好点,为什么?
回复 使用道具 举报
xiezhongmin 发表于 2015-3-2 18:50
修正后的代码:
#include

我写的有错嘛?错在哪里?
回复 使用道具 举报
先运行程序,看看结果,然后想想逻辑上哪点有错误
回复 使用道具 举报
xiezhongmin 发表于 2015-3-3 08:14
先运行程序,看看结果,然后想想逻辑上哪点有错误

结果不对,哈哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马