Большие числа
Форум |
Назад | Оглавление | Дальше
Contents |
Работа с большими числами
Классы BigInteger и BigDecimal принадлежат пакету java.math
Классы предназначены для выполнения действий с числами, состоящими из произвольного количества цифр.
Статический метод valueOf() преобразует обычное число в большое:
BigInteger a = BigInteger.valueOf(100);
Для выполнения арифметических операций с большими числами используются методы add() и multiply():
BigInteger c = a.add(b); // c = a + b BigInteger d = c.multiply(b.add(BigInteger.valueOf(2))); // d = c * (b + 2)
В отличие от C++, Java не поддерживает перегрузку операторов.
Поэтому разработчики класса BigInteger были лишены возможности переопределить операторы + и * для методов add() и multiply().
Следующая программа оперирует большими числами при расчете вероятности выигрыша в лотерее.
Например, если надо угадать 60 чисел из 490, то шанс выиграть равен:
1 из 716395843461995557415116222540092933411717612789263493493351013459481104668848.
import java.math.*; import java.util.*; public class BigIntegerTest { public static void main(String[] args) { Scanner in = Scanner.create(System.in); System.out.print("Сколько номеров? "); int k = in.nextInt(); System.out.print("Наибольший номер? "); int n = in.nextInt(); /* * Вычисление выражения * n * (n - 1) * (n - 2) * ... * (n - k + 1) * ----------------------------------------- * 1 * 2 * 3 * ... * k */ BigInteger lotteryOdds = BigInteger.valueOf(1); for (int i = 1; i <= k; i++) { lotteryOdds = lotteryOdds .multiply(BigInteger.valueOf(n - i + 1)) .divide(BigInteger.valueOf(i)); } System.out.println("Ваши шансы 1 из " + lotteryOdds); } }
Справочник
java.math.BigInteger
BigInteger add(BigInteger other) // сложение BigInteger subtract(BigInteger other) // вычитание BigInteger multiply(BigInteger other) // умножение BigInteger divide(BigInteger other) // деление BigInteger mod(BigInteger other) // остаток от деления
int compareTo(BigInteger other) // сравнение Возвращает: 0 если BigInteger == other -1 если BigInteger < other +1 если BigInteger > other
static BigInteger valueOf(long x) // конвертирует x в BigInteger
java.math.BigDecimal
BigDecimal add(BigDecimal other) // сложение BigDecimal subtract(BigDecimal other) // вычитание BigDecimal multiply(BigDecimal other) // умножение BigDecimal divide(BigDecimal other, int roundingMode) // деление (округление см. ниже)
roundingMode.ROUND_HALF_UP // округляет в меньшую сторону если число < 5, // иначе округляет в большую сторону Другие режимы округления описаны в документации.
int compareTo(BigDecimal other) // сравнение Возвращает: 0 если BigDecimal == other -1 если BigDecimal < other +1 если BigDecimal > other
static BigDecimal valueOf(long x) // конвертирует x в BigDecimal static BigDecimal valueOf(long x, int scale) // конвертирует x/10^scale в BigDecimal
Форум |
Назад | Оглавление | Дальше