我在C ++中使用Project Euler#2解决方案有什么问题?

时间:2018-04-19 13:00:23

标签: c++ fibonacci

这就是问题:

  

Fibonacci序列中的每个新术语都是通过添加   前两个任期。从1和2开始,前10个术语将   be:1,2,3,5,8,13,21,34,55,89,...考虑中的条款   发现,斐波那契序列的值不超过四百万   偶数项的总和。

当我运行下面的程序时,它给了我

  

-1833689714

有人可以帮我解决问题吗?

=============================================== =========================

**enter image description here**

#include <iostream>
using namespace std;
int fibona (int k);
int first = 0 , second = 1 , fibo = 0, sum = 0;

int main()
{
cout << "Sum of even values less than 4000000 : " ;
fibona (4000000);
}



int fibona (int k)
{
for (int c = 0 ; c < k ; c++)
{

    if (c <= 1)
    {
        fibo = c;
    }
    else
    {
        fibo = first + second;
        first = second;
        second = fibo;
    }
    if (fibo % 2 == 0)
    {

        sum += fibo;

    }

}



cout << sum <<endl;

}

1 个答案:

答案 0 :(得分:0)

你知道((1+Sqrt[5])/2)^4000000/Sqrt[5] = 1.627477... × 10^835950 多少钱?

必须大约

#include <iostream>
using namespace std;
long fibona_even_sum (long k);

int main()
{
    const long N=4000000;
    cout << "Sum of even Fibonacci numbers: " <<endl;
    cout << fibona_even_sum(N) <<endl;
}

long fibona_even_sum(long N_max)
{
    long first = 0 , second = 1;
    long sum=0;

    while(true)
    {
        long first_copy=first;
        first=second;
        second+=first_copy;
        if(second>N_max)
            return sum;
        if(!(second%2))
            sum+=second;
    }
}

没有办法让它适合任何变量类型。

long

在上面的代码中,您可以将所有int更改为{{1}}。它工作正常。