Java程序,用于范围之间的完美数字

时间:2018-01-09 07:20:20

标签: java nested-loops perfect-numbers

我编写了这个java程序,用于打印所有三位数的完美数字,但除了" PERFECT NUMBERS"之外它不会打印任何内容。和"总计:0"。不允许使用数组和函数(学校作业)。

class PerFect
{
    public static void main(String args[])
    {
        int num, i, sum=0, total=0;
        System.out.println("PERFECT NUMBERS : ");
        for(num=100; num<=999; num++)  
        {
            for(i=1; i<=num; i++)
            {
                if(num%i==0)
                    sum=sum+i;
            }
            if(num*2==sum)
            {
                System.out.println(num);
                sum=0;
                total++;
            }
       }
       System.out.println("Total : "+total);
    }
}

5 个答案:

答案 0 :(得分:2)

您没有将总和重置为0.

public static void main(String args[])
    {
        int num, i, sum=0, total=0;
        System.out.println("PERFECT NUMBERS : ");
        for(num=100; num<=999; num++)  
        {
          sum=0;
            for(i=1; i<=num; i++)
            {
                if(num%i==0)
                    sum=sum+i;
            }

         //System.out.println("Sum : "+sum + " " + num);
            if(num*2==sum)
            {
                System.out.println(num);
                sum=0;
                total++;
            }
       }
       System.out.println("Total : "+total);
    }

答案 1 :(得分:1)

int sum = 0;移到第一个for循环中,而不是在外面声明。

答案 2 :(得分:1)

您需要重置外循环的每次迭代sum。否则,您将继续参考您评估的上一个数字的因素:

for (num=100; num<=999; num++) {
    sum = 0;
    // Rest of your code

答案 3 :(得分:1)

你应该在每个循环中将sum重置为0.

int num, i, sum, total=0;
System.out.println("PERFECT NUMBERS : ");
for (num = 100; num <= 999; num++) {
    sum = 0; // you should reset sum every loop.
    for (i = 1; i <= num; i++) {
        if (num % i == 0) {
            sum = sum + i;
        }
        if (num * 2 == sum) {
            System.out.println(num);
            total++;
        }
    }
}
System.out.println("Total : " + total);

答案 4 :(得分:-1)

base64data