логическая ошибка в программе идеального числа

Мне было интересно, как разработать программу на C ++, которая запрашивает у пользователя 2 числа n1, n2 с n2 быть больше чем n1, Тогда программа предназначена для определения всех идеальных чисел между n1 а также n2, Целое число называется совершенным числом, если сумма его факторов, включая 1 (но не само число), равна самому числу. Например, 6 — идеальное число, потому что 6 = 1 + 2 + 3,

пока что вот то, что я придумал, и в нем нет ошибок времени выполнения / синтаксиса, но, к сожалению, логические ошибки:

#include <iostream>
using namespace std;

int main(){
int number, sum = 0, divi = 1, n1, n2;
cout<<" Please enter n1: ";
cin>>n1;
cout<<" Please enter n2: ";
cin>>n2;
number = n1;
while(number <= n2){

while(divi <=n2){

if (number%divi ==0)
sum+=divi;

divi++;
}

if(sum == number)
cout<<number<<endl;

number++;
}
return 0;
}

Я могу использовать только в то время как петли. Можете ли вы обнаружить какие-либо логические ошибки?

1

Решение

#include <iostream>
using namespace std;

int main(){
int number, sum = 0, divi = 1, n1, n2;
cout<<" Please enter n1: ";
cin>>n1;
cout<<" Please enter n2: ";
cin>>n2;
number = n1;
while(number <= n2){
sum=0;   // reintialize variable for every incrasing number n1 to n2
divi=1;  // reintialize variable
while(divi <number){ //use number insteaed of n2

if (number%divi ==0)
{
sum+=divi;
}
divi++;
}

if(sum == number)
cout<<number<<endl;

number++;
}
return 0;
}
2

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

  1. Вам нужно сбросить divi до 1 и sum до 0 сразу после строки while(number <= n2){, (Иначе divi а также sum будет расти по ошибке).

  2. Переопределить верхнюю границу вашего внутреннего while в while(divi < number){, (Вы хотите изучить факторы между 1 и numberне после него.)

3

По вопросам рекламы [email protected]