找到偶数的总和不超过四百万

时间:2012-08-21 16:48:51

标签: java

class fibo {

    //int firstNumber = 0;

    public static void main(String args[]){
        //int firstNumber = 0;
        int length = 4000000;
        int[] series = new int[length]; 
        //long[] sum = new long[4000000];
        long sum =0;
        series[0] = 0;
        series[1] = 1;
        for (int i = 2; i<4000000; i++){
            //firstNumber  = firstNumber + i;
            //System.out.println("fibo" + i);
            series[i] = series[i-1] + series[i-2];


            if(series[i] %2 == 0) {
                sum = sum + series[i];

            }

        }

        for(int j=0;j<length; j++){
            System.out.println("fibo Series" + series[j]);
        }               

    }

}

我得到了答案,但方法不同。这段代码有什么问题?任何人都可以对此有所了解。

相同的代码在长度为10时有效。我没有对此进行任何考虑,但答案似乎有所不同。它的东西-92719184589087346是不正确的。

2 个答案:

答案 0 :(得分:4)

  

这段代码出了什么问题?

嗯,它取的是前四百万斐波纳契数中偶数的总和,斐波那契数字序列中的偶数不到四百万。

创建了一个包含所有斐波那契数字的数组,无缘无故:你一次只需要最后两个,所以你可以在恒定的空间内做到这一点。

答案 1 :(得分:0)

我猜你正试图得到总和少于400万的总和?因为那不是你在计算的东西。你正在计算第四百万分之一的总和,这是完全不同的。

你的答案错误的原因(除了你的逻辑错误)是长期不能适合你正在计算的数字。斐波纳契序列中的第400万个条目是一个非常大的数字,它会溢出你的长。溢出将使它回绕到底片中(可能多次)。