在C ++中调用布尔函数

时间:2017-03-04 17:10:59

标签: c++ function boolean function-call perfect-numbers

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

#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 ;
}

2 个答案:

答案 0 :(得分:2)

让我们看看num == 3i == 2时的循环。

int i = 1;
while( i < num ) {
    if ( num % i == 0 ) {
        sum = sum + i;
        i++;
    }
}
  1. i < num2 < 3,这是真的,所以我们将进入while循环。
  2. num % i == 03 % 2 == 0,这是假的,所以我们不会输入条件。
  3. 我们回到了while循环的顶端。
  4. inum没有改变,所以这是一个无限循环。
  5. 您可能需要以下内容:

    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;
    }
    

答案 1 :(得分:-1)

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