BigInteger для огромных чисел
Целые числа произвольной точности
«BigInteger для огромных чисел» — бесплатный урок Java Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.
За пределами длинных целых чисел
Примитивный тип long может хранить значения примерно до 9,2 квинтиллиона. Когда требуются целые числа больше этого предела, Java предоставляет BigInteger из пакета java.math, у которого нет фиксированного верхнего предела.
Переполнение длинного целого типа
Превышение Long.MAX_VALUE незаметно приводит к переходу к отрицательному числу. Такое искажение — классический источник ошибок.
public class Main {
public static void main(String[] args) {
long max = Long.MAX_VALUE;
System.out.println(max);
System.out.println(max + 1);
}
}Создание BigInteger
Создайте BigInteger из строки цифр. Ограничения на длину нет, поэтому можно записывать числа, значительно превышающие пределы любого примитивного типа.
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
BigInteger huge = new BigInteger("123456789012345678901234567890");
System.out.println(huge);
}
}Создание из длинного целого с помощью valueOf
Если исходное значение помещается в long, удобным фабричным методом будет BigInteger.valueOf.
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
BigInteger n = BigInteger.valueOf(1000000);
System.out.println(n);
}
}Неизменяемая арифметика
Как и BigDecimal, BigInteger является неизменяемым. add, subtract и multiply возвращают новые объекты, которые необходимо сохранить.
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
BigInteger a = new BigInteger("99999999999999999999");
BigInteger b = BigInteger.valueOf(1);
System.out.println(a.add(b));
}
}Умножение больших чисел
Умножение, которое привело бы к переполнению long, без проблем выполняется с помощью BigInteger.
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
BigInteger a = new BigInteger("10000000000");
BigInteger b = new BigInteger("10000000000");
System.out.println(a.multiply(b));
}
}Вычисление факториала
Факториалы растут очень быстро. Даже факториал 30 переполняет long, но BigInteger легко с ним справляется.
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
BigInteger result = BigInteger.ONE;
for (int i = 1; i <= 30; i++) {
result = result.multiply(BigInteger.valueOf(i));
}
System.out.println(result);
}
}Возведение в степень и остаток от деления
pow возводит значение в целую степень, а mod возвращает остаток от деления. Оба метода часто используются в криптографии.
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
BigInteger base = BigInteger.valueOf(2);
System.out.println(base.pow(64));
System.out.println(base.pow(10).mod(BigInteger.valueOf(7)));
}
}Сравнение значений
Используйте compareTo, чтобы упорядочить два значения BigInteger. Метод возвращает отрицательное число, ноль или положительное число.
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
BigInteger a = new BigInteger("500");
BigInteger b = new BigInteger("1000");
System.out.println(a.compareTo(b));
}
}Полезные константы
BigInteger предоставляет ZERO, ONE, TWO и TEN. Используйте их как начальные аккумуляторы или в циклах.
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
BigInteger sum = BigInteger.ZERO;
sum = sum.add(BigInteger.TEN).add(BigInteger.ONE);
System.out.println(sum);
}
}Когда это нужно использовать
Используйте BigInteger для факториалов, очень больших счётчиков, криптографических ключей и любых случаев, когда результат может превысить предел long. Для обычного подсчёта выбирайте примитивные типы: они значительно быстрее.
Быстрая проверка
Проверьте, насколько хорошо Вы понимаете BigInteger.
Повторение
Вы научились использовать BigInteger:
longнезаметно переполняется, а уBigIntegerнет фиксированного предела- Создавайте его из строки или с помощью
valueOf - Он неизменяем, поэтому сохраняйте результат каждой операции
add,multiply,powиmodохватывают распространённые математические операции- Используйте его для факториалов, криптографии и любых значений, превышающих
long
Часто задаваемые вопросы
Урок «BigInteger для огромных чисел» бесплатный?
Да — полный текст урока «BigInteger для огромных чисел» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.
Чему я научусь в уроке «BigInteger для огромных чисел»?
Целые числа произвольной точности Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Java Academy?
Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «BigInteger для огромных чисел»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Java Academy?
Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Почему не стоит использовать double для денег
- Работа с BigDecimal
- Округление и масштаб
- BigInteger для огромных чисел