我想知道如何开发一个C ++程序,提示用户输入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;
}
我只能使用while循环。你能发现任何逻辑错误吗?
答案 0 :(得分:3)
您需要在divi
行之后将sum
重置为1并将while(number <= n2){
重置为0。 (否则divi
和sum
会出错)。
将内部while
的上限重新定义为while(divi < number){
。 (您想检查1和number
之间的因素,而不是之后的因素。)
答案 1 :(得分:2)
#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;
}