2014-03-13 31 views
1

我想知道如何開發一個C++程序,提示用戶輸入2個數字n1,n2n2大於n1。然後該程序旨在確定n1n2之間的所有完美數字。一個整數被認爲是一個完美的數字,如果它的因素的總和,包括1(但不是數字本身),等於數字本身。例如,6是一個完美的數字,因爲6 = 1 + 2 + 3完美數字程序中的邏輯錯誤

到目前爲止,這裏是我想出了,它有沒有運行時/語法錯誤,但不幸的是邏輯上的錯誤(S):

#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;  
} 

我可以同時循環只能使用。你能發現任何邏輯錯誤嗎?

+0

點心和迪維應該每個號碼前被重新初始化。 – user448810

回答

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;  
} 
+1

從我所看到的內容中得到的答案並不多...您是否可以添加一個解釋,以便那些正在查看您的帖子的人很清楚? – 0x499602D2

+1

好吧夥計,如果有些東西錯過,你可以編輯它 –

+1

好,但我的意思是你不應該只是發佈自己的代碼。總結一下你所做的改變以及他們爲什麼幫助,總是很好的。 – 0x499602D2

3
  1. 您只需要行while(number <= n2){後重置divi爲1,sum爲0。 (否則divisum將增加錯誤)。

  2. 將您的內部while的上限重新定義爲while(divi < number){。 (要檢查1 number的因素,以後吧。)