문자열을 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 (문자열 발)

BigInteger의 10 진수 문자열 표현을 BigInteger로 변환합니다.

Javadoc


나는 똑같이 시도했지만 java.math.BigInteger를 가져 오기를 놓친 문제에 직면했습니다.
Arun

23

문서 에 따르면 :

BigInteger (문자열 발)

BigInteger의 10 진수 문자열 표현을 BigInteger로 변환합니다.

이는 다음 스 니펫에 표시된대로 String를 사용 하여 BigInteger객체 를 초기화 할 수 있음을 의미합니다 .

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)parse()직접 문자열 인수를 취하는 BigInteger의 생성자를 사용할 수 있습니다 :

BigInteger numBig = new BigInteger("8599825996872482982482982252524684268426846846846846849848418418414141841841984219848941984218942894298421984286289228927948728929829");

그것은 당신에게 원하는 가치를 줄 것입니다.


2

arrayof strings를 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로 변환하려는 경우 다음과 같이 시도하면 예외가 발생합니다. new BigInteger ( "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.