C中的完美数字,不会打印出来

时间:2015-07-27 23:11:38

标签: c

我有以下程序,完美的数字不会打印,只输出数字1和2,这是不完美的。有什么不对,是范围问题还是循环?在print语句后添加break语句会导致输出所有数字1 - 99。

int sum = 0;

for (int i = 1; i < 100; i++) {

    for (int j = 1; j <= i; j++) {

        if (i % j == 0){

            sum += j;}

        if (sum == i){

            printf("%d\n", i);

        }
    }
}

3 个答案:

答案 0 :(得分:4)

三个问题:

    对于每个 sum
  1. i必须初始化为零,而不仅仅是在开头
  2. 第二个循环条件必须为j < i,根据完整数字的定义,数字本身被排除在外
  3. sum == iprintf之后的检查必须移到内部循环之外,否则会打印中间结果

答案 1 :(得分:1)

给出此代码,其中包含所有先前的评论/答案:

#include <stdio.h>


int main( void )
{
    int sum = 0;

    for (int i = 1; i < 100; i++)
    {
        sum = 0; // reset on each new number

        for (int j = 1; j < i; j++)
        {
            if (i % j == 0)
            {
                sum += j;
            } // end if
        } // end for

        if (sum == i)
        {
             printf("%d\n", i);
        } // end if
    } // end for
    return 0;
} // end function: main

输出为6和28

答案 2 :(得分:0)

我认为你不需要一直测试我(j&lt; i)......它足以达到i / 2 ......

#include<stdio.h>
void main() {
    int sum;
    for (int i = 1; i < 100; i++) {
        sum = 0;
        for (int j = 1; j <= i/2; j++) {
            if (i % j == 0) {
                sum += j;
            }
        }
        if (sum == i) {
            printf("%d\n", i);
        }
    }
}