-2

我正在努力完成一项任务。打印1 到 10000 之间的4 个完美数字。

在数论中,一个完美数是一个正整数,它等于它的适当正因数之和,即不包括数字本身的它的正因数之和。

这是我的代码:

public class PerfectNumbers
{
    public static void main(String[] args)
    {
        // Perfect numbers!

        for (int number = 1; number < 10000; number++)
        {
            int sum = 0;
            int i = 1;
            while (i < number)
            {

                if (number % i == 0)
                {
                    sum += i;
                    i++;

                }
                else
                {   
                    i++;
                    continue;
                }

                if (sum == number)
                {
                    System.out.println(number);
                }
                else
                {
                    continue;
                }

            }
        }
    }
}

输出是:

6
24 <--- This one is wrong because next must be 28. 
28
496
2016
8128
8190

我的代码有什么问题?谢谢你。

4

2 回答 2

8

if (sum == number)检查需要在循环外进行。否则,您可能会选择除数子集之和等于该数字的数字。

事实上,24 就是一个这样的例子,因为1+2+3+4+6+8=24. 你的代码过早地断定 24 是完美的,尽管它也可以被 12 整除。

于 2012-12-10T16:49:16.770 回答
2

您的代码打印 24 是因为当您以 i = 8 单步执行循环时,所有数字的总和为 1+2+3+4+6+8 = 24,因此您的条件得到满足。您需要在打印中添加另一个条件,以防止在求和尚未完成时打印。在这种情况下,您尚未添加 12 以使计算有效。

我会将 if 语句移到 while 循环之外,以便仅在计算总和后检查它。

于 2012-12-10T16:54:34.727 回答