长溢:斐波那契系列

时间:2013-05-18 15:21:54

标签: java overflow

我正在尝试解决第二个Euler问题(计算所有偶数Fibonacci数的总和<4百万),到目前为止我已经想出了这个:

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();
    }
 }

我把它改成了很长时间,但仍然有溢出。你能告诉我哪里出错了吗?

3 个答案:

答案 0 :(得分:2)

问题涉及Fibonacci术语少于400万,而不是前400万斐波那契术语。

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

答案 1 :(得分:1)

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

你只需要做一会儿直到a + b> = 4百万。

答案 2 :(得分:0)

只需打印出所有数字,然后查看溢出的位置。通过这种方式,您可以看到您无法获得前400万斐波纳契术语。您可以从this link获取更多斐波纳契信息。