Если для решения задачи недостаточно точности встроенных целочисленных типов и чисел с плавающей точкой, можно обратиться к классам BigInteger и BigDecimal из пакета java.math.
Эти классы предназначены для выполнения действий с числами, состоящими из произвольного количества цифр. Классы BigInteger и BigDecimal реализуют арифметические операции произвольной точности соответственно для целых и действительных чисел.Для преобразования обычного числа в число с произвольной точностью(называемое также большим числом) используется статический метод ValueOf();
1 |
BigInteger a = BigInteger.valueOf(100); |
К сожалению, к большим числам нельзя применять обычные математические операции вроде + или *. Вместо этого надо использовать методы add() и multiply() из соответствующих классов.
1 2 3 |
BigInteger c = a.add(b); // c = a + b BigInteger d = c.multiply(b.add(BigInteger.value.Of(2))); // d = c * (b + 2) |
В отличии от C++, язык Java не поддерживает перегрузку операций. Поэтому разработчики класса BigInteger были лишены возможности переопределить операции + или * для методов add() и multiply() в классе BigInteger.
Проектировщики языка перегрузили только операцию + для обозначения конкатенации строк. Они решили не перегружать остальные операции и не предоставили такой возможности программистам Java в их собственных классах.