使用Java在1-100之间打印完美数字

时间:2019-02-05 16:20:20

标签: java for-loop nested-loops perfect-numbers

我不知道我的代码有什么问题。它应该打印介于1到100之间的所有理想数字。我尝试使用嵌套的for循环,while循环和for循环。但是,该代码似乎不正确。

class CompProject1
{

    public static void main()

    {

        int num, sum=0;

        int i;

        for(num=1; num<100; num++)

        {

           for(int j = 1; j<=num ; j++)

           {

               if(num%j==0)

               {

                   sum = sum+j;

                }

            }

           if(sum==num)

           {

             System.out.println(sum);  

            }
        }
    }
}

6 个答案:

答案 0 :(得分:1)

将代码更改为:

public static void main(String[] s1) throws Exception {
    int num, sum = 0;
    int i;
    for (num = 1; num < 100; num++) {
        for (int j = 1; j <= num - 1; j++) {   // change made here
            if (num % j == 0) {
                sum = sum + j;
            }
        }
        if (sum == num) {
            System.out.println(sum);
        }
        sum = 0;                              // change made here
    }

}

要点:

  1. 内部迭代完成后,将sum重置为0
  2. 在您的内部 for-loop中,您需要检查是否直到num - 1而不是num,因为每个数字都可以被自身整除

答案 1 :(得分:1)

1)您肯定需要为每次迭代重置sum变量,因此您应该在每个循环中执行int sum = 0;

2)您需要在j <= num/2;期间进行迭代!

3)考虑使用Java 8,我将在这里为您编写一些示例。

在这里查看我的示例,它是如此美丽:

public class PerfectNumbersDemo {

  public static void main(String[] args) {
    IntStream.range(1, 100)
        .filter(PerfectNumbersDemo::isPerfect)
        .forEach(System.out::println);
  }

  private static boolean isPerfect(int number) {
    return number == IntStream.rangeClosed(1, number / 2)
        .filter(i -> number % i == 0)
        .sum();
  }
}

答案 2 :(得分:0)

您需要:

  • sum = 0,每次循环迭代
  • 迭代直到< num,直到<= num

这是固定代码:

public static void main(String[] args)  {

int sum;
for(int num = 1; num < 100; num++) {

    sum = 0;

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

    if(sum == num) {
        System.out.println(sum);
    }
}

}

输出:

  

6
  28

答案 3 :(得分:0)

这似乎是作业或作业问题。您只能自己解决此问题,而不要向Stack Overflow上的人员提出。

但是,您要寻找的答案是here。谨防!无论输入的数字是否为完美数字,此代码都会打印,但不会打印低于100的所有数字(可能是完美数字)。那是你的功课。

答案 4 :(得分:0)

因此,您的代码有一些小问题,我将尝试找出它们。

1。首先,您的sum变量应位于第一个for循环之内
2.第二个循环将运行的上限为j<num而不是j<=num,因为对于完美的数字,该数字本身不应该计入总和。

您的代码将如下所示。

我不知道我的代码有什么问题。它应该打印介于1到100之间的所有理想数字。我尝试使用嵌套的for循环,while循环和for循环。但是,该代码似乎不正确。

class CompProject1 {

public static void main()

{

     int num;

     for(num=1; num<100; num++)

     {

         int sum = 0;

         for(int j = 1; j<=num ; j++)

         {

              if(num%j==0)

              {

               sum = sum+j;

              }

       }

       if(sum==num)

       {

        System.out.println(sum);  

        }
    }
 }
}

答案 5 :(得分:0)

public class factors{
public static void main(String args[]){
    int sum=0;

    for(int k=2;k<=30;k++){
    for(int i=1;i<k;i++)
    {
        if(k%i==0)
            sum=sum+i;


    }
       if(k==sum)
             System.out.println(sum);


        sum=0;          //sum=0 is very important.
    }

}

}

输出

6
28