РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
352 of 1593 menu

Тип big.Int

Тип big.Int представляет целые числа со знаком произвольной точности. В отличие от встроенных типов int, int64 или uint64, он может хранить числа любого размера, ограниченные только доступной памятью. Это делает его незаменимым для задач криптографии, работы с большими факториалами, финансовых расчетов с высокой точностью и других областей, где стандартных типов недостаточно. Для создания нового числа используются функции new(big.Int) или big.NewInt, а для выполнения арифметических операций предоставляются методы, изменяющие сам приемник и возвращающие его для удобства цепочечных вызовов.

Создание и базовые операции

Давайте создадим два больших числа и выполним их сложение:

package main import ( "fmt" "math/big" ) func main() { a := big.NewInt(1234567890123456789) b := big.NewInt(9876543210987654321) res := new(big.Int).Add(a, b) fmt.Println(res) }

Результат выполнения кода:

11111111101111111110

Обратите внимание, что метод Add принимает два аргумента и сохраняет результат в вызывающем объекте. В примере мы создали новый big.Int через new и сразу выполнили сложение, что является идиоматичным подходом.

Преобразование из строки

Часто большие числа приходят в виде строк. Для их парсинга используется метод SetString, который принимает основание системы счисления:

package main import ( "fmt" "math/big" ) func main() { num := new(big.Int) num.SetString("123456789012345678901234567890", 10) fmt.Println(num) }

Результат выполнения кода:

123456789012345678901234567890

Метод SetString возвращает булево значение, указывающее на успешность парсинга, что позволяет обрабатывать ошибки преобразования.

Умножение больших чисел

Метод Mul позволяет перемножать большие числа, сохраняя точность:

package main import ( "fmt" "math/big" ) func main() { a := big.NewInt(123456789) b := big.NewInt(987654321) res := new(big.Int).Mul(a, b) fmt.Println(res) }

Результат выполнения кода:

121932631112635269

Как видите, результат умножения полностью помещается в big.Int, в отличие от стандартных типов, где могло бы произойти переполнение.

Сравнение двух чисел

Для сравнения чисел используется метод Cmp, который возвращает -1, 0 или 1, если первое число меньше, равно или больше второго:

package main import ( "fmt" "math/big" ) func main() { a := big.NewInt(100) b := big.NewInt(200) res := a.Cmp(b) fmt.Println(res) }

Результат выполнения кода:

-1

Этот метод часто используется в условных операторах для принятия решений на основе сравнения больших чисел.

Смотрите также

  • функцию big.NewInt,
    которая создает новое большое целое число из int64
  • метод big.Int.SetString,
    который парсит строку в большое целое число
  • метод big.Int.Cmp,
    который сравнивает два больших целых числа
  • тип big.Float,
    который предоставляет числа с плавающей точкой произвольной точности
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить