私はいくつかの本当に大きな数字を標準入力から読み、それらを足し合わせようとしています。
ただし、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)
のようなものはありますか?
ドキュメント によると:
BigInteger(String val)
BigIntegerの10進文字列表現をBigIntegerに変換します。
次のスニペットに示すように、String
を使用してBigInteger
オブジェクトを初期化できます。
sum = sum.add(new BigInteger(newNumber));
BigIntegerには、引数として文字列を渡すことができるコンストラクターがあります。
以下を試してください、
private void sum(String newNumber) {
// BigInteger is immutable, reassign the variable:
this.sum = this.sum.add(new BigInteger(newNumber));
}
valueOf(long)
およびparse()
を使用する代わりに、文字列引数を取るBigIntegerコンストラクターを直接使用できます。
BigInteger numBig = new BigInteger("8599825996872482982482982252524684268426846846846846849848418418414141841841984219848941984218942894298421984286289228927948728929829");
これで目的の値が得られます。
array
of strings
をarray
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
}