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


82

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

ただし、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)ますか?

回答:


140

コンストラクターの使用

BigInteger(String val)

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

Javadoc


同じことを試しましたが、java.math.BigIntegerのインポートに失敗したという問題に直面しました
Arun

23

ドキュメントによると:

BigInteger(String val)

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

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

sum = sum.add(new BigInteger(newNumber));

10

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

以下を試してください、

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

8

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

BigInteger numBig = new BigInteger("8599825996872482982482982252524684268426846846846846849848418418414141841841984219848941984218942894298421984286289228927948728929829");

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


2

arrayofstringsをofに変換するループの場合は、次arraybigIntegersようにします。

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

平文(数値だけでなく)をBigIntegerに変換したい場合、次のことを実行しようとすると、例外が発生します。newBigInteger( "not a Number")

この場合、次のように行うことができます。

public  BigInteger stringToBigInteger(String string){
    byte[] asciiCharacters = string.getBytes(StandardCharsets.US_ASCII);
    StringBuilder asciiString = new StringBuilder();
    for(byte asciiCharacter:asciiCharacters){
        asciiString.append(Byte.toString(asciiCharacter));
    }
    BigInteger bigInteger = new BigInteger(asciiString.toString());
    return bigInteger;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.