Вопрос-ответ

Large Numbers in Java

Большие числа в Java

Как я буду выполнять вычисления с чрезвычайно большими числами в Java?

Я пробовал long но это достигает максимума в 9223372036854775807, а при использовании целого числа оно не сохраняет достаточно цифр и, следовательно, недостаточно точно для того, что мне нужно.

Есть ли какие-то решения по этому поводу?

Переведено автоматически
Ответ 1

Вы можете использовать BigInteger класс для целых чисел и BigDecimal для чисел с десятичными разрядами. Оба класса определены в java.math пакете.

Пример:

BigInteger reallyBig = new BigInteger("1234567890123456890");
BigInteger notSoBig = new BigInteger("2743561234");
reallyBig = reallyBig.add(notSoBig);
Ответ 2

Используйте BigInteger класс, который является частью библиотеки Java.

http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigInteger.html

Ответ 3

Вот пример, который очень быстро получает большие числа.

import java.math.BigInteger;

/*
250000th fib # is: 36356117010939561826426 .... 10243516470957309231046875
Time to compute: 3.5 seconds.
1000000th fib # is: 1953282128707757731632 .... 93411568996526838242546875
Time to compute: 58.1 seconds.
*/

public class Main {
public static void main(String... args) {
int place = args.length > 0 ? Integer.parseInt(args[0]) : 250 * 1000;
long start = System.nanoTime();
BigInteger fibNumber = fib(place);
long time = System.nanoTime() - start;

System.out.println(place + "th fib # is: " + fibNumber);
System.out.printf("Time to compute: %5.1f seconds.%n", time / 1.0e9);
}

private static BigInteger fib(int place) {
BigInteger a = new BigInteger("0");
BigInteger b = new BigInteger("1");
while (place-- > 1) {
BigInteger t = b;
b = a.add(b);
a = t;
}
return b;
}
}
Ответ 4

Оформить заказ BigDecimal и BigInteger.

java