0

编写一个printNumbers以整数 max 作为参数的静态方法,并打印出所有小于或等于 max 的完美数。

起初,我一直得到错误的答案,因为在我将其更改为 j < i 之前,内部循环被设置为 j < max。但是,我不明白为什么这个范围很重要,因为i % j != 0无论如何都不会,即使 j 的范围更大?

for (int i = 1; i <= max; i++) {   
    int sum = 0;

    for (int j = 1; j < i; j++) {
        if (i % j == 0) {
            sum += j;
        }
    }
    if (sum == i) {
        System.out.print(sum + " ");
    }
}

如果我更改了内部循环j < max,则printNumbers(6)同时给出 1 和 6,但printNumbers(500)只给出 1 而没有其他数字。

4

1 回答 1

1

如果您j < max在内部循环中设置,则 when j = ii % j == 0返回true并扭曲您的结果。这是在编码中要注意的数学错误的一个很好的例子。

于 2019-06-05T23:35:44.803 回答