-1

私が書いた問題が見つかりません。Project Euler #16 を試みています。ここでは、2^1000 のすべての数字を合計する必要があります。私のプログラムは小さな数字で動作しますが、数字が 18 桁程度になると壊れます。何か助けはありますか?

public static double digit(double n){

    return n % 10;

}

public static double sumofDigits(double n){

    double sum = 0;

    while(n > 1){

        sum += digit(n);
        n = Math.floor(n/10);

    }

    return sum;

}

public static void main(String[] args) {

    double x = Math.pow(2,1000);

    double y = 22222222222222222222d;

    System.out.println(sumofDigits(x));

            System.out.println(sumofDigits(y));

}

}

4

3 に答える 3

5

double の精度は、10 進数で約 16 桁です。2 乗 1000 は桁数がはるかに多い (約 300) ため、単純に double を使用することはできません。

BigInteger クラスを見てください。

于 2012-12-22T10:02:16.110 に答える
1

ここでは使用できませんdouble。精度が限られています。( Java プリミティブ データ型を参照)

そのMath.pow(2,1000)ため、一部の (最初の) 桁と指数のみを計算します。

任意の長整数を処理するライブラリを使用する必要があります。(例: biginteger )

于 2012-12-22T09:59:40.947 に答える
0

分かりました。ここですべての double をその 10 進数を表す BigDecimal オブジェクトに置き換えて、10 進数の精度と # のサイズを実現しました。みんな、ありがとう。

于 2012-12-25T10:49:35.363 に答える