【问题标题】:Calling Boolean function in C++在 C++ 中调用布尔函数
【发布时间】:2021-02-23 20:33:56
【问题描述】:

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

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

【问题讨论】:

  • 你应该使用你的调试器来单步调试你的代码,看看它与你期望的不同。
  • 调试器是解决此类问题的正确工具。 询问 Stack Overflow 之前,您应该逐行浏览您的代码。如需更多帮助,请阅读How to debug small programs (by Eric Lippert)。至少,您应该 [编辑] 您的问题,以包含一个重现您的问题的 Minimal, Complete, and Verifiable 示例,以及您在调试器中所做的观察。

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


【解决方案1】:

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

int i = 1;
while( i < num ) {
    if ( num % i == 0 ) {
        sum = sum + i;
        i++;
    }
}
  1. i &lt; num2 &lt; 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;
}

【讨论】:

  • 感谢您的帮助!我现在明白问题出在哪里了……我从来没想过这个问题……
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 2022-12-21
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    • 2018-06-27
    相关资源
    最近更新 更多