0

我正在尝试解决第二个欧拉问题(计算所有偶数斐波那契数的总和 < 400 万),到目前为止我已经想出了这个:

public class CCTrial1 {
    public static void fib(){
    long  a = 0, b = 1;
    long  c = 0, sum = 0;
    int i = 1;
    long even = 0;
    while(i < 400000){
        c = a + b;
        sum = c;
        a = b;
        b = c;
        if(sum %2 == 0){
            even += sum;

        }
        i++;
    }
    System.out.println("Count " +i);
    System.out.println("Last Fib no " +sum);
    System.out.println("Sum " +even);
    }

    public static void main (String[] args){
        fib();
    }
 }

我已将其更改为 long,但仍然溢出。你能告诉我哪里出错了吗?

4

3 回答 3

2

问题涉及少于 400 万个斐波那契项,而不是前 400 万个斐波那契项。

例如,第 35、36 和 37 个斐波那契数是 5702887、9227465 和 14930352;问题陈述将它们全部排除在外,因为它们都大于 4000000。

于 2013-05-18T15:26:58.563 回答
1

如果要计算 400 万以下的所有斐波那契数,则不应循环 400 万次。第 4 百万个斐波那契数约为 10^835950,这远远超出了您的范围。

相反,您应该只是简单地做一会儿,直到 a+b >= 400 万。

于 2013-05-18T15:28:04.613 回答
0

只需打印出所有数字,然后查看溢出发生的位置。这样你会发现你无法得到前 400 万个斐波那契项。您可以从此链接获得更多斐波那契信息。

于 2013-05-18T15:29:36.230 回答