Вот моя программа, цель которой показать, является ли входное целое число идеальным числом или нет. Требуется использовать логическую функцию и вызывать ее обратно в основной функции. Однако после запуска пробного периода выходных данных нет. Может кто-нибудь помочь этому программированию новичку … Заранее спасибо за любую помощь.
#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 ;
}
Давайте посмотрим на ваш цикл, когда 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;
}
Ваша функция perfect(int)
возвращать бул, а не целое число, так if(perfect(num))
можно использовать напрямую.
Вы могли бы использовать тип возврата int для функции perfect()
использовать условие «если» как: if(perfect(num)==1)