BigInteger в С++ или его аналог?

254
15 сентября 2018, 05:00

В последнее время программировать приходится имея дело с большими числами, так, что не хватает размеров типа. Как подключить бибилиотеку BigInteger в С++? Это по идее должно решить проблему. Или может есть какой-то аналог? Нужно решить задачу, где на вход подаются числа не превышающие 10^100 . Как вообще найти выход из положения?

Answer 1

boost-library

boost::multiprecision::cpp_int (BigInteger)

boost::multiprecision::cpp_float - большие числа с плавающей запятой

Answer 2

Классика жанра это GMP. Но есть и другие варианты.

Как-то мне тоже понадобилась длинная арифметика. Но использовать GMP было нельзя, так как длинная арифметика нужна была для микроконтроллеров без операционной системы и кучи. Пришлось написать свою библиотеку С++ шаблонов для работы с длинными целыми числами. Вот ссылка:

https://sourceforge.net/projects/muntl/?source=frontpage&position=5

Там в архиве есть и описание на русском языке.

UPD1:

А память под переменные и промежуточные результаты выделялась по месту инициализации шаблона в виде массивов с вычисленным во время компиляции размером?

Да, все массивы хранятся статически в объектах класса и размер переменных определяется пользователем на этапе компиляции. То есть внутри этой библиотеки шаблонов обращений к куче нет. Соответственно, нет затрат времени на размещение объектов в куче.

READ ALSO
Странности со switch

Странности со switch

Обнаружил для себя такую неожиданную вещь: код

228
Java приложения - запуск на разных версиях

Java приложения - запуск на разных версиях

Заметил, что скомпилированный в jar проект java запускается на одном компе, но не запускается на другомЯ сразу понял, что дело в разных версиях...

248
Автозаполнение массива

Автозаполнение массива

Допустим, я создаю строковый одномерный массивВ дальнейшем к каждому его элементу мне нужно будет прибавить другую строку

310