web-dev-qa-db-ja.com

文字列をBigIntegerに変換するにはどうすればよいですか?

私はいくつかの本当に大きな数字を標準入力から読み、それらを足し合わせようとしています。

ただし、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()longのみを取るため、longの最大値(9223372036854775807)より大きい数値を追加することはできません。

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

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

59
Twinone

コンストラクターを使用する

BigInteger(String val)

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

Javadoc

112
Uku Loskit

ドキュメント によると:

BigInteger(String val)

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

次のスニペットに示すように、Stringを使用してBigIntegerオブジェクトを初期化できます。

sum = sum.add(new BigInteger(newNumber));
19
Vito Gentile

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

以下を試してください、

private void sum(String newNumber) {
    // BigInteger is immutable, reassign the variable:
    this.sum = this.sum.add(new BigInteger(newNumber));
}
9
Darshit Chokshi

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

BigInteger numBig = new BigInteger("8599825996872482982482982252524684268426846846846846849848418418414141841841984219848941984218942894298421984286289228927948728929829");

これで目的の値が得られます。

7
User9123

array of stringsarray of bigIntegersに変換するループの場合:

String[] unsorted = new String[n]; //array of Strings
BigInteger[] series = new BigInteger[n]; //array of BigIntegers

for(int i=0; i<n; i++){
    series[i] = new BigInteger(unsorted[i]); //convert String to bigInteger
}
0
Omar Mohammed