完全数 Java

Pefect Number Java

你好,这是我第一次在这里提问,我阅读了指南,我确实在寻找答案但没有找到答案,所以我希望我的问题在指南之内。无论如何,我被困在一个简单的 Java 练习中,我必须输出前 N 个完全数(在数论中,一个完全数是一个正整数,等于它的正因子之和,也就是说,不包括数字本身的正除数之和(也称为等分和)。所以我这样做了

import java.util.Scanner;

public static void main(String[] args) {

    Scanner in = new Scanner(System.in);

    int cont = 0;
    int num = 1;
    int soma = 0;
    System.out.println("Quantos números perfeitos?");
    int n = in.nextInt();

    while (cont < n) {
        for (int i = 1; i <= num / 2; i++) {
            if (num % i == 0) {
                soma = soma + i;
            }
        }

        if (num == soma) {
            System.out.println(num + " é perfeito.");
            cont++;
        }
        num++;

    }
}

它陷入了无限循环,我不明白为什么。无论如何,如果有人可以帮助我,我将非常感激,如果我的问题已得到解答,或者这只是一个愚蠢的问题,对不起,正如我所说,这是我第一次提出问题。谢谢。

您的代码看起来不错——您唯一忘记做的是在 while 循环中每次都重置 soma 的值。在您当前的代码中,soma 所有 到目前为止您循环的数字的适当因子的总和,这不是您想要的。

这是您需要的代码:

Scanner in = new Scanner(System.in);

int cont = 0;
int num = 1;
int soma;
System.out.println("Quantos números perfeitos?");
int n = in.nextInt();

while (cont < n) {
    soma = 0; //Don't forget this line

    for (int i = 1; i <= num / 2; i++) {
        if (num % i == 0) {
            soma = soma + i;
        }
    }

    if (num == soma) {
        System.out.println(num + " é perfeito.");
        cont++;
    }

    num++;
}