-1

我可以找到完美数字,但我无法打印小于给定整数的所有完美数字。

int main() {

    cout << "Enter a number ";
    int number{};
    cin >> number;
    int sum{};

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

我希望6 28 496输出input=500

4

1 回答 1

1

似乎您已经将“是否完美”的逻辑与“给定限制下的所有数字”逻辑混合在一起,从而无法获得理想的结果。

我会接受你的测试并将其放入一个函数中。

bool isPerfect(int number) {
    int j{}, sum{};
    for (int i=1; i<number; i++) {
        j = number % i;
        if (j == 0) sum = sum + i;
    }
    return (sum == number);
}

然后使用小于给定输入的所有整数重复调用该函数:

int main()
{
    std::cout << "Enter a number ";
    int number{};
    std::cin >> number;
    for (int n = 1; n <= number; n++) {
        if (isPerfect(n))
            std::cout << n << " ";
    }
}

输出给定限制 30 = 6 28

当然,您仍然可以在 main() 函数中完成所有操作,但是将其分解后会更加清晰。

于 2019-10-22T21:36:54.970 回答