Làm cách nào để chuyển đổi Chuỗi thành BigInteger?


82

Tôi đang cố gắng đọc một số con số thực sự lớn từ đầu vào chuẩn và cộng chúng lại với nhau.

Tuy nhiên, để thêm vào BigInteger, tôi cần sử dụng 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)));
}

Điều đó hoạt động tốt, nhưng vì BigInteger.valueOf()chỉ mất a long, tôi không thể thêm các số lớn hơn longgiá trị tối đa của (9223372036854775807).

Bất cứ khi nào tôi cố gắng thêm 9223372036854775808 trở lên, tôi sẽ nhận được NumberFormatException (hoàn toàn được mong đợi).

Có một cái gì đó giống như BigInteger.parseBigInteger(String)?

Câu trả lời:


140

Sử dụng hàm tạo

BigInteger (Chuỗi val)

Chuyển biểu diễn chuỗi thập phân của BigInteger thành BigInteger.

Javadoc


Tôi cố gắng cùng một vấn đề nhưng mặt coz i bỏ lỡ nhập java.math.BigInteger
Arun

23

Theo tài liệu :

BigInteger (Chuỗi val)

Chuyển biểu diễn chuỗi thập phân của BigInteger thành BigInteger.

Nó có nghĩa là bạn có thể sử dụng a Stringđể khởi tạo một BigIntegerđối tượng, như được hiển thị trong đoạn mã sau:

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

10

BigInteger có một hàm tạo mà bạn có thể truyền chuỗi làm đối số.

thử bên dưới,

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

8

Thay vì sử dụng valueOf(long)parse(), bạn có thể trực tiếp sử dụng hàm tạo BigInteger nhận đối số chuỗi:

BigInteger numBig = new BigInteger("8599825996872482982482982252524684268426846846846846849848418418414141841841984219848941984218942894298421984286289228927948728929829");

Điều đó sẽ cung cấp cho bạn giá trị mong muốn.


2

Đối với một vòng lặp mà bạn muốn chuyển đổi một arraycủa stringsthành một arraytrong số bigIntegersnày:

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

Nếu bạn có thể muốn chuyển đổi bản rõ (không chỉ số) thành BigInteger, bạn sẽ gặp phải một ngoại lệ, nếu bạn chỉ cố gắng: new BigInteger ("không phải là một Số")

Trong trường hợp này, bạn có thể làm như sau:

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;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.