90

標準入力から非常に大きな数値を読み取って、それらを合計しようとしています。

ただし、BigInteger に追加するには、次を使用する必要がありますBigInteger.valueOf(long);

private BigInteger sum = BigInteger.valueOf(0);

private void sum(String newNumber) {
    // BigInteger is immutable, reassign the variable:
    sum = sum.add(BigInteger.valueOf(Long.parseLong(newNumber)));
}

それは正常に動作しますが、BigInteger.valueOf()のみがかかるため、の最大値 (9223372036854775807)longより大きい数値を追加することはできません。long

9223372036854775808 以上を追加しようとするたびに、NumberFormatException が発生します (これは完全に予想されることです)。

のようなものはありBigInteger.parseBigInteger(String)ますか?

4

6 に答える 6

150

コンストラクターの使用

BigInteger(文字列値)

BigInteger の 10 進文字列表現を BigInteger に変換します。

Javadoc

于 2013-03-30T10:03:54.207 に答える
25

ドキュメントによると:

BigInteger(文字列値)

BigInteger の 10 進文字列表現を BigInteger に変換します。

次のスニペットに示すように、オブジェクトStringを初期化するためにa を使用できることを意味します。BigInteger

sum = sum.add(new BigInteger(newNumber));
于 2013-03-30T10:07:36.583 に答える
10

BigInteger には、文字列を引数として渡すことができるコンストラクターがあります。

以下で試してください、

private void sum(String newNumber) {
    // BigInteger is immutable, reassign the variable:
    this.sum = this.sum.add(new BigInteger(newNumber));
}
于 2013-03-30T10:12:11.283 に答える
8

valueOf(long)andを使用する代わりにparse()、文字列引数を取る BigInteger コンストラクターを直接使用できます。

BigInteger numBig = new BigInteger("8599825996872482982482982252524684268426846846846846849848418418414141841841984219848941984218942894298421984286289228927948728929829");

それはあなたに望ましい値を与えるはずです。

于 2016-07-01T11:55:38.860 に答える