2015-02-05 79 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 
     // ... 
    } 
} 

你怎么能指望这个循环终止?