这是我的程序,旨在显示输入整数是否是完整数字。需要使用布尔函数并在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 ;
}
答案 0 :(得分:2)
让我们看看num == 3
和i == 2
时的循环。
int i = 1;
while( i < num ) {
if ( num % i == 0 ) {
sum = sum + i;
i++;
}
}
i < num
是2 < 3
,这是真的,所以我们将进入while循环。num % i == 0
是3 % 2 == 0
,这是假的,所以我们不会输入条件。i
和num
没有改变,所以这是一个无限循环。您可能需要以下内容:
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)