2015-02-05 121 views
0

以下程序是查找不超過400萬的偶數斐波那契項的和。 在這個程序中最後的'cout'語句根本沒有得到執行。爲什麼?請幫助。'cout'語句不被執行

#include <iostream> 

using namespace std; 

int main() 
{ 
    int a, b, c, sum, sum1, sum2; 
    a = 1; 
    b = 2; 
    sum2 = 0; 

    cout << b << endl; 
    c = a + b; 

    sum1 = c; 

    while (c <= 4000000) 
    { 
     a = b; 
     b = c; 
     if ((a + b) <= 4000000) 
     { 
      c = a + b; 
      if (c%2 == 0) 
      { 
       sum2 = sum2 + c; 
       cout << c << endl; 
      } 
     } 
    } 

    cout << "The sum of even fibonacci numbers not greater than 4 million is: " << (sum1 + sum2); //Not being executed 
    return 0; 
} 
+0

您是否嘗試沖洗? – 2015-02-05 13:42:27

+4

你肯定有一個無限循環。 – 2015-02-05 13:44:58

+0

@stefan:對。但由於這甚至不是真正的問題,我將刪除評論。 – BDL 2015-02-05 13:57:27

回答

5

我不能執行程序,但我認爲你的程序永遠不會結束,這就是爲什麼你永遠不會去那個聲明。您的外圍while循環將繼續前進unitl c <= 4000000。但是,如果且只有(a + b) <= 4000000,您纔會增加c,所以c永遠不會超過400萬。

爲了解決這個問題,你可以嘗試以下:

#include <iostream> 

using namespace std; 

int main() 
{ 
    int a, b, c, sum, sum1, sum2; 
    a = 1; 
    b = 2; 
    sum2 = 0; 

    cout << b << endl; 
    c = a + b; 

    sum1 = c; 

    while (c <= 4000000) 
    { 
     a = b; 
     b = c; 
     c = a + b; //Update c regardless. 
     if (c <= 4000000) 
     {   
      if (c%2 == 0) 
      { 
       sum2 = sum2 + c; 
       cout << c << endl; 
      } 
     } 
    } 


    cout << "The sum of even fibonacci numbers not greater than 4 million is: " << (sum1 + sum2); //Not being executed 
    return 0; 
} 
+0

如果刪除'if((a + b)<= ...',程序仍然可以達到正確的結果會更簡單。 – 2015-02-05 13:47:25

+0

@remyabel:是的,我同意我試着給出一個答案,一個OP提供的。 – npinti 2015-02-05 13:48:40

+0

btw,是不是sum1沒用? – 2015-02-05 13:48:43

1
while (c <= 4000000) 
{ 
    // ... 
    if ((a + b) <= 4000000) 
    { 
     c = a + b; // i.e. <= 4000000 
     // ... 
    } 
} 

你怎麼能指望這個循環終止?