-3

这是我的程序,旨在显示输入整数是否为完美数。需要使用布尔函数并在主函数中调用它。但是,运行试用后,没有输出。任何人都可以帮助这个编程新手...在此先感谢您的帮助。

#include <iostream>
using namespace std;

bool perfect ( int num )
{
    int sum = 0, i = 1;
    while( i < num ) {
        if ( num % i == 0 ) {
            sum = sum + i;
            i++;
        }
    }

    if ( num == sum )
        return 1 ;
    else
        return 0 ;
}

int main()
{
    int num ;
    cin >> num ;

    if ( perfect ( num ) == 1 )
        cout << " YES " << endl ;
    else
        cout << " NO " << endl ;
}
4

2 回答 2

2

让我们看看你的循环 whennum == 3i == 2

int i = 1;
while( i < num ) {
    if ( num % i == 0 ) {
        sum = sum + i;
        i++;
    }
}
  1. i < num这是2 < 3真的,所以我们将进入while循环。
  2. num % i == 03 % 2 == 0哪个是假的,所以我们不会输入条件。
  3. 我们回到 while 循环的顶部。
  4. inum没有改变,所以这是一个无限循环。

你可能想要这样的东西:

bool perfect_number(int x) {
  int sum_of_divisors = 0;
  for (int divisor = 1; divisor < x; divisor++)
    if (x % divisor == 0)
      sum_of_divisors += divisor;
  return sum_of_divisors == x;
}

我们可以优化成:

bool perfect_number(int x) {
    return x == 6 || x == 28 || x == 496 || x == 8128 || x == 33550336;
}
于 2017-03-04T17:17:03.323 回答
-1

您的函数perfect(int)返回一个布尔值而不是整数,因此if(perfect(num))可以直接使用。您可以使用返回类型 int 的函数perfect()来使用“if”条件:if(perfect(num)==1)

于 2019-01-08T15:07:53.120 回答