Fibonacci序列中的每个新项都是通过添加前两个项来生成的。从1和2开始,头10个术语将是: 1、2、3、5、8、13、21、34、55、89、 通过考虑Fibonacci序列中值不超过400万的项,找出偶数项的和。
我也提到过这个question,但它对我的案子没有多大帮助。
当我将序列限制为10时,我得到了偶数项之和。这是我的代码:
#include <iostream>
using namespace std;
int main()
{
int x = 0, y = 1, z, sumeven = 0;
for (int stop=1; stop <= 5; stop++)
{
z = x + y;
x = y;
y = z;
cout << y << endl;
if (y % 2 == 0)
{
sumeven += y;
}
}
cout << "The total is: "<< sumeven << endl;
return 0;
}这是我对上述代码的输出:
1
2
3
5
8
The total is: 10
Program ended with exit code: 0当我输入4,000,000值时,问题就会发生。这是密码。唯一的区别是我没有打印序列。
#include <iostream>
using namespace std;
int main()
{
int x = 0, y = 1, z, sumeven = 0;
for (int stop=1; stop <= 4000000; stop++)
{
z = x + y;
x = y;
y = z;
if (y % 2 == 0)
{
sumeven += y;
}
}
cout << "The total is: "<< sumeven << endl;
return 0;
}这是对上述代码的输出。
The total is: -1833689714
Program ended with exit code: 0我不明白为什么我的代码看起来与较小的序列完美地工作,而不是在代码完全相同时输入的400万。
我刚开始介绍大学的桥接课程,攻读计算机科学的快速通道学位。他们在两个周末里补习了一学期的课程,我希望能在结束前掌握C++的基本知识,所以我们非常感谢他们的任何帮助。谢谢!
发布于 2016-11-28 21:06:55
你把问题解释错了。您正在检查fibonacci序列的4.000.000th元素,而问题要求的元素低于4.000.000
只要改变
for (int stop=1; stop <= 4000000; stop++)至
while(y < 4000000)编辑:如果你不明白为什么数字是负的,这是整数溢出的情况:overflow
https://stackoverflow.com/questions/40853113
复制相似问题