2015-03-25 6 views
1

Так что мне приходится иметь дело с действительно большими числами. Фактически, точное число составляет 18 446 744 073 709 551 616, что составляет 2^64. Думаю, я мог бы написать это как 2^64, но тогда я собираюсь вычитать цифры из него и делить и что угодно, и некоторые из моих вычислений также могут быть в квинтиллионах. Я попытался добавить «L» до конца этого так:Работа с чрезвычайно большими номерами

public int total = 18446744073709551616L; 

Тем не менее, по-прежнему дает мне ту же ошибку, как целое число слишком велико. Я не уверен, что это потому, что я печатаю его неправильно или он слишком велик, даже с «L». Любое решение вокруг этого? Я определенно желаю потратить немного вычислительной мощности или добавить дополнительное время выполнения, если это работает. Merci!

+0

Читайте в классе 'BigInteger'. Самый большой «длинный» - 2^63-1. –

+0

Вы не можете сохранить этот номер размера в 'int'. Вы даже не можете сохранить номер этого размера в 'long' – Neilos

ответ

3

Вы можете использовать java.math.BigInteger.

Создайте BigInteger из строки, используя new BigInteger("18446744073709551616").

Вы можете выполнять математические операции с помощью методов, требующих, например add, subtract, multiply, divide и mod. Вы не можете использовать операторы +, -, *, /, %, поскольку они работают только на примитивных типах (и + на струнах).

+0

Примечание: в качестве альтернативы можно использовать« новый BigInteger (2) .pow (64) », как предложил удаленный ответ rgettman. Вы не можете использовать 'new BigInteger (18446744073709551616)', поскольку для этого требуется, чтобы число было введено в 'int' для начала. – immibis

+0

Ах, эти ответы все замечательные. Спасибо за помощь! – Tim

+0

Извините, но у меня есть последний вопрос. Кажется, что я могу использовать только функции добавления, вычитания и умножения, а также с помощью двух BigIntegers. Что делать, если я хочу делать total.multiply (12) или что-то простое? Каков самый простой способ обойти это? – Tim

1

Я считаю, что в вашем случае только BigInteger или BigDecimal будет решением.

Смежные вопросы