2013-04-21 85 views
0

我想寫一個代碼,找到比用戶的輸入更低的完美數字。 樣品正確的輸出的:爲什麼我會收到錯誤「浮點異常」?

輸入正整數:100
圖6是一個完全數
28被完全數
沒有更多完全數小於或等於100

但是當我運行我的代碼時,出現錯誤Floating point exception

並且找不到原因。我究竟做錯了什麼?

這裏是我的代碼:

#include <iostream> 

using namespace std; 

bool isAFactor(int, int); 

int main(){ 
    int x, y; 
    int countOut, countIn; 
    int userIn; 
    int perfect = 0; 

    cout << "Enter a positive integer: "; 
    cin >> userIn; 

    for(countOut = 0; countOut < userIn; countOut++){ 
     for(countIn = 1; countIn <= countOut; countIn++){ 
      if(isAFactor(countOut, countIn) == true){ 
       countOut = countOut + perfect; 
      } 
     } 

     if(perfect == countOut){ 
      cout << perfect << " is a perfect number" << endl; 
     } 

     perfect++; 
    } 

    cout << "There are no more perfect numbers less than or equal to " << userIn << endl; 

    return 0; 
} 


bool isAFactor(int inner, int outer){ 
    if(outer % inner == 0){ 
     return true; 
    } 

    else{ 
     return false; 
    } 
} 
+7

您正在計算x%0. – 2013-04-21 17:42:07

+3

如果您發佈了真實的錯誤消息,這將有所幫助。我很確定沒有編譯器會說「接受」。在代碼中只有整數的浮點錯誤也有點奇怪。 – 2013-04-21 17:42:45

+0

「浮點收集」 計算進行到x%1。不是嗎? 奇怪的是,只有int和bool值纔得到該錯誤消息。這就是爲什麼我問這個問題:P – user2304913 2013-04-21 18:03:56

回答

0

可以打電話來澄清@Aki Suihkonen的評論,表演時: outer % inner 如果inner是零,你會得到一個被零除錯誤。

這可以通過調用isAFactor(0, 1)來追溯。
它在mainfor循環中。

isAFactor(countOut, countIn)的第一個參數被分配在最外層for循環: for (countOut = 0; ...

通知您與初始化countOut值。

編輯1:

Change your `isAFactor` function to: 

    if (inner == 0) 
    { 
     cerr << "Divide by zero.\n"; 
     cerr.flush(); 
     return 0; 
    } 
    if (outer % inner ... 

在高於任一cerr線斷點。
當執行停止時,請查看堆棧跟蹤。一個好的調試器也可以讓你檢查跟蹤中每個點的參數/值。

+0

我已經更改'布爾isAFactor(int內部,int外部)'爲'isAFactor(int outer,int inner)',所以它不再是零。但是會顯示相同的錯誤消息。 – user2304913 2013-04-21 18:36:17

+0

看我的**編輯1:**。使用調試器。 – 2013-04-21 18:47:43

+0

謝謝,我現在可以看到問題所在。但我仍不明白爲什麼它除以零。我甚至試過'if(inner == 0){inner ++;}' – user2304913 2013-04-21 19:18:50

1

的參數只是交換。您呼叫的功能isAFactor(countOut, countIn)時,你應該isAFactor(countIn, countOut)

+0

我試過了,仍然給出同樣的錯誤...謝謝你的建議 – user2304913 2013-04-21 18:18:29

+0

我將isAFactor改爲isAFactor (int outer,int inner)但它仍然不工作....仍然是相同的錯誤 – user2304913 2013-04-21 18:27:06

相關問題