C ++ Perfect Number с выпуском вложенных циклов

Я пытаюсь найти идеальное число.
Совершенное число — это число, которое является суммой всех его делителей, например 6 = 1 + 2 + 3.

В основном, что я делаю здесь, это попросить 2 числа и найти идеальное число между этими двумя числами. У меня есть функция, которая проверяет делимость и 2 вложенных цикла.

Моя проблема в том, что я не получаю никакого результата. Я пересмотрел & не могу найти ничего плохого. Компилятор не выдает никаких ошибок.

Что может быть не так?

#include <iostream>
using namespace std;

bool isAFactor(int, int);

int main()
{

int startval;
int endval;
int outer_loop;
int inner_loop;
int perfect_number = 0;

cout << "Enter Starting Number: ";
cin >> startval;
cout << "Enter Ending Number: ";
cin >> endval;

for(outer_loop = startval; outer_loop <= endval; outer_loop++)
{
for(inner_loop = 1; inner_loop <= outer_loop; inner_loop++)
{
if (isAFactor(outer_loop, inner_loop) == true)
{
inner_loop += perfect_number;
}
}

if (perfect_number == outer_loop)
{
cout << perfect_number << " is a perfect number." << endl;
}

else
{
cout << "There is no perfect number." << endl;
}

}

system("PAUSE");
return 0;
}

bool isAFactor(int outer, int inner)
{
if (outer % inner == 0)
{
return true;
}

else
{
return false;
}

0

Решение

inner_loop += perfect_number; должно быть perfect_number += inner_loop;,

Есть и другие проблемы — нужно сбросить perfect_number к нулю в каждом внешнем цикле, и вы, вероятно, должны напечатать сообщение "There is no perfect number." если ни одно из чисел в диапазоне не является идеальным, вместо того, чтобы печатать его один раз для каждого числа в диапазоне, которое не является идеальным.

Я бы посоветовал вам переименовать perfect_number в sum_of_factors, outer_loop в candidate_perfect_number а также inner_loop в candidate_factor, или похожие.

2

Другие решения

после заявления if:

cout << perfect_number;
cout << outer_loop;

if (perfect_number == outer_loop)
{
cout << perfect_number << " is a perfect number." << endl;
}

и посмотрим, какие у них ценности

Обновлено:

Какова ценность вашего endval? 0, и вот почему цикл заканчивается так рано

0

О, так много вопросов.

  1. Переменная perfect_number никогда не меняется Ваш компилятор пометил
    этот?
  2. Внешний цикл будет на единицу больше конечного значения при выходе;
    Ты это знал?
  3. Вам не нужно сравнивать bool значения для true или же false,
  4. Вы могли бы упростить isAFactor функция к return (outer %
    inner) == 0;
    ,
  5. Вы можете заменить звонок на isAFactor с выражением
    ((outer % inner) == 0),
0
По вопросам рекламы [email protected]