1

我想知道如何开发一个 C++ 程序,提示用户输入 2 个数字n1,大于. 然后该程序旨在确定和之间的所有完美数。如果整数的因数之和(包括 1(但不包括数字本身))等于数字本身,则称整数为完美数。例如,6 是一个完美的数字,因为.n2n2n1n1n26 = 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 循环。你能发现任何逻辑错误吗?

4

2 回答 2

3
  1. 您需要在该行之后重置divi为 1 和sum0 while(number <= n2){。(否则divisum增长错误)。

  2. 将您的内部的上限重新定义whilewhile(divi < number){。(您要检查 1 和 之间的因子number,而不是之后的因子。)

于 2014-03-13T13:04:18.533 回答
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;    
}
于 2014-03-13T13:10:33.623 回答