C++错误,添加偶数
C++ Error, adding even numbers
可能重复:
偶数fibonacci数之和
目前,我正在做一些Project Euler问题,我正在处理第二个问题。
通过考虑Fibonacci序列中值不超过400万的项,找到偶数值项的和。
我正在用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
中添加两次。这与您的bug相匹配;计算机加610和198得到1006,因为610+198+198=1006,因为198加了两次。我想你是想让这个成为
evsum += a;
试着改变它,看看它是否能解决问题。
也就是说,让我们看看我们是否能在偶数斐波那契数中发现一个模式。Fibonacci序列如下:
0 1 1 2 3 5 8 13 21 34 55 89 ...
^ ^ ^ ^
注意,这个模式是偶数、奇数、奇数、偶数、奇数,奇数、偶数,奇数、奇数,等等。这种趋势还在继续,如果你愿意,你甚至可以通过归纳来证明这是真的。考虑到这一点,您可以通过对每三个斐波那契数(从零开始)进行求和来使代码更干净。你可能会通过为这些数字的总和找到一个很好的闭合形式表达式来进一步优化这一点,但我将把它作为一个练习。:-)
希望这能有所帮助!
您的添加完全是伪造的。这个bug之所以在系列中出现得如此之晚,是因为a
在那之前从来都不是偶数(除了开头的2
),只有b
。解决这个问题,只需使用evsum += a
和evsum += b
。
下面是一个关于固定代码Ideone的实际示例。
evsum += evsum + a;
你确定要那样做吗?)
这看起来不正确:
evsum += evsum + a;
// ^^ Maybe =
evsum += evsum + a;
这一行有一个拼写错误,应该是evsum = evsum + a;
或evsum += a;
将语句evsum+=evsum+a更改为evsum=evsum+a
您错误地将evsum两次添加到该行的最终结果中。
610+198+198=1006
- C++ 动态数组每次添加时将大小增加 1 - 错误
- 尝试将 boost::stacktrace 添加到 CMake 项目时出现构建错误
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 添加符号 libgtest.so 错误:命令行中缺少 DSO
- 当 lib 已添加到其他依赖项时,如何在 VS 中调试未解析的外部符号错误
- 野牛/flex:计算器将双精度值解释为整数,所以我添加了 YYSTYPE 双精度 #define 但我有多个编译错误
- C#WPF和C++/CLI以及C++在C++/CLI中添加外部库错误
- 添加qt-libs后出现编译错误
- 试图添加两个矢量,但添加顺序错误
- 为什么自删除的全局 Vulkan 实例仅在添加层时才导致段错误?
- 添加可变参数函数的错误结果
- C++ 添加编译器警告,以错误使用自定义打印/日志功能
- 将 std::文件系统头文件添加到我的程序时出现编译错误
- 尝试向 COM 对象添加另一个接口时出现静态强制转换错误 C2440
- c++ IF 语句执行,但添加 ELSE 会显示错误
- c++ 添加具有写入文件错误的文本变量
- 添加错误,简单的问题
- 运算符重载:简单添加...错误 C2677:二进制"+":未找到采用类型 ___ 的全局运算符(或者不存在可接受的转换)
- 在treap中添加错误
- 我如何添加错误检查为空字符串的情况