首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法完全正确地获得C++项目Euler #2

无法完全正确地获得C++项目Euler #2
EN

Stack Overflow用户
提问于 2016-11-28 20:43:18
回答 1查看 179关注 0票数 0

Fibonacci序列中的每个新项都是通过添加前两个项来生成的。从1和2开始,头10个术语将是: 1、2、3、5、8、13、21、34、55、89、 通过考虑Fibonacci序列中值不超过400万的项,找出偶数项的和。

我也提到过这个question,但它对我的案子没有多大帮助。

当我将序列限制为10时,我得到了偶数项之和。这是我的代码:

代码语言:javascript
复制
#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;
}

这是我对上述代码的输出:

代码语言:javascript
复制
1
2
3
5
8
The total is: 10
Program ended with exit code: 0

当我输入4,000,000值时,问题就会发生。这是密码。唯一的区别是我没有打印序列。

代码语言:javascript
复制
#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;
}

这是对上述代码的输出。

代码语言:javascript
复制
The total is: -1833689714
Program ended with exit code: 0

我不明白为什么我的代码看起来与较小的序列完美地工作,而不是在代码完全相同时输入的400万。

我刚开始介绍大学的桥接课程,攻读计算机科学的快速通道学位。他们在两个周末里补习了一学期的课程,我希望能在结束前掌握C++的基本知识,所以我们非常感谢他们的任何帮助。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-28 21:06:55

你把问题解释错了。您正在检查fibonacci序列的4.000.000th元素,而问题要求的元素低于4.000.000

只要改变

代码语言:javascript
复制
for (int stop=1; stop <= 4000000; stop++)

代码语言:javascript
复制
while(y < 4000000)

编辑:如果你不明白为什么数字是负的,这是整数溢出的情况:overflow

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40853113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档