0Pricing
Java Academy · Урок

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 — локальная установка не требуется.

Все уроки этого курса

  1. Почему не стоит использовать double для денег
  2. Работа с BigDecimal
  3. Округление и масштаб
  4. BigInteger для огромных чисел
← Назад к Java Academy