【问题标题】:What's wrong with my solution to Project Euler's #2 in C++?我在 C++ 中对 Project Euler #2 的解决方案有什么问题?
【发布时间】:2018-09-30 00:00:34
【问题描述】:

这是问题:

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

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

-1833689714

有人可以帮我写代码吗?

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

#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;

}

【问题讨论】:

  • “斐波那契数列中值不超过四百万的项”与前四百万项不同。
  • 你的函数没有返回任何东西,为什么会编译?
  • @EduardRostoyman 我带了一个 cout
  • 它是一个 cout,而不是一个 return
  • 例如,“不超过 10 的词”将是“1,2,3,5,8”。但是“前 10 个术语”将是“1, 2, 3, 5, 8, 13, 21, 34, 55, 89”。看出区别了吗?

标签: c++ fibonacci


【解决方案1】:

你知道Fib(4000000)多少钱吗?

必须是大约

((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。它工作正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多