C++错误,添加偶数

标签 c++ math fibonacci

<分区>

Possible Duplicate:
Sum of even fibonacci numbers

目前,我正在做一些欧拉计划问题,我正在解决第二个问题。

By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.

我正在用 C++ 解决这个问题,我认为我的代码非常好,因为在某种程度上,一切都是正确的,但随后,一切都失控了...... 代码:

#include <iostream>
using namespace::std;
int main() {
    int a = 1;
    int b = 1;
    int evsum = 0;
    while (a < 4000000 and b < 4000000) {
        a = a + b;
        b = a + b;
        if (a % 2 == 0)
            evsum += evsum + a;
        if (b % 2 == 0)
            evsum = evsum + b;
        cout << a << endl;
        cout << b << endl;
        cout << evsum << "evensum" << endl;
    }
}

xCode 编译器正确打印所有内容,直到...

2
3
2evensum

5
8
10evensum

13
21
10evensum

...

...

233
377
198evensum

610
987
1006evensum

由于某些原因,编译器将 610 添加到 198 并认为它等于 1006!我该如何解决这个问题???

最佳答案

线

evsum += evsum + a;

相当于

evsum = evsum + evsum + a;

请注意,这会在 evsum​​ 中添加两次。这符合您的错误;计算机将 610 和 198 相加得到 1006,因为 610 + 198 + 198 = 1006,因为 198 相加了两次。我想你的意思是这样

evsum += a;

尝试改变它,看看它是否能解决问题。

也就是说,让我们看看是否可以在偶数斐波那契数中发现一个模式。斐波那契数列如下所示:

 0  1  1  2  3  5  8 13 21 34 55 89 ...
 ^        ^        ^        ^

请注意,模式是偶数、奇数、奇数、偶数、奇数、奇数、偶数、奇数、奇数等。这种趋势仍在继续,如果您愿意,甚至可以通过归纳法证明这是正确的。鉴于此,您可以通过仅对每三个斐波那契数(从零开始)求和来使您的代码更清晰一些。您可以通过为这些数字的总和找到一个很好的封闭形式表达式来进一步优化它,但我将把它留作练习。 :-)

希望这对您有所帮助!

关于C++错误,添加偶数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9591729/

相关文章:

c++ - 通过继承检测习语和 SFINAE

math - Visual Basic 6.0 中的十进制数据类型

java - 如何用斐波那契计算多米诺骨牌的各种方式?

带有 Integer 对象的 Java 递归方法 StackOverflowError

C++11 : How can I define a function that accept a universal reference of a specific type of object?

c++ - 我怎样才能知道我的 C++ 应用程序在 Mac 上使用了多少内存

c++ - 非冗余对列表中的对象索引

python-3.x - 2个问题,Python OverflowError : (34, 'Result too large' ) and wrong function results

c++ - 在 float 结构中填充

php - 用数学替换 elseif