完美数字程序中的逻辑错误

时间:2014-03-13 13:00:10

标签: c++ math while-loop primes perfect-numbers

我想知道如何开发一个C ++程序,提示用户输入n1n2n2大于n1。然后该程序旨在确定n1n2之间的所有完美数字。如果一个整数的因子(包括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循环。你能发现任何逻辑错误吗?

2 个答案:

答案 0 :(得分:3)

  1. 您需要在divi行之后将sum重置为1并将while(number <= n2){重置为0。 (否则divisum会出错)。

  2. 将内部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;    
}