-3
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 は間違っています。

4

2 に答える 2

4

このコードの何が問題になっていますか?

400万未満のフィボナッチ数列内の偶数ではなく、最初の 400 万フィボナッチ数内の偶数の合計をとっています。

また、見たすべてのフィボナッチ数の配列作成していますが、理由はありません。一度に必要なのは最後の 2 つだけなので、定数空間でそれを行うことができます。

于 2012-08-21T16:51:33.563 に答える
1

合計が400万未満の合計を取得しようとしていると思いますか?それはあなたが計算しているものではないからです。完全に異なる400万番目のインデックスで合計を計算しています。

あなたの答えが間違っている理由は(あなたの論理が間違っていることを除いて)、longはあなたが計算している数に適合できないからです。フィボナッチ数列の400万番目のエントリは非常に大きいため、長い間オーバーフローしています。オーバーフローにより、ネガにラップバックします(おそらく複数回)。

于 2012-08-21T16:57:45.047 に答える