1

n = 1 から 1000 までの桁数の合計を 2^n で出力しようとしています。

public static void main(String[] args) {
    int n = 1000;
    for (int i = 1; i < n; i++) {
        BigInteger power = BigInteger.valueOf((int)Math.pow(2, i));
        int sum = 0;
        while (power.intValue() > 0) {
            sum += power.intValue() % 10;
            power = power.divide(BigInteger.valueOf(10));
        }
        System.out.print(sum + "  ");
    }
}

約 2^30 程度までしか機能せず、残りは同じ結果の 46 を出力します。

Cで「ロングロング」を使用して同様のことを試みたところ、同様の制限の後に0が出力されました。

答えによると、私は変わりました

BigInteger power = BigInteger.valueOf((int)Math.pow(2, i));

BigInteger power = BigInteger.valueOf(2).pow(i);

46 が 0 に変更されました。C と同じです。まだ機能していません...

4

4 に答える 4

7

代わりに関数をMath.pow使用して値を生成するために使用しています。BigInteger

合計は、int ではなく BigInteger に格納する必要があります。

于 2013-08-14T21:32:00.287 に答える
7

整数演算を行ってから、それをbigintegerに入れています。代わりに、biginteger の pow メソッドを使用してください。

于 2013-08-14T21:32:11.393 に答える
4

を使用していないためですBigInteger

を使用して数値を計算しBigIntegerても、それらの合計を魔法のように に保存することはできませんint

同様に、inttoを渡しても魔法のように大きくなるBigInteger.valueOf()ことはありません。int

于 2013-08-14T21:31:53.270 に答える
3

Math.pow()BigIntegers ではなく、通常の整数で呼び出しています。整数リテラルで呼び出しています。

あなたはこれを求めている:

int i = 7; //or whatever power
BigInteger k = BigInteger.valueOf(2);
k = k.pow(i);
于 2013-08-14T21:31:44.093 に答える