Мне было интересно, как разработать программу на 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;
}
Я могу использовать только в то время как петли. Можете ли вы обнаружить какие-либо логические ошибки?
#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;
}
Вам нужно сбросить divi
до 1 и sum
до 0 сразу после строки while(number <= n2){
, (Иначе divi
а также sum
будет расти по ошибке).
Переопределить верхнюю границу вашего внутреннего while
в while(divi < number){
, (Вы хотите изучить факторы между 1 и number
не после него.)