Работа со сверхбольшими числами в С++

25 Окт
2011

Бывают случаи, когда необходимо использовать числа, выходящие за рамки стандартных возможностей языка. Можно написать свой класс, определить необходимые функции и т.д. Но зачем изобретать велосипед? Ведь есть готовые решения. Одним из них является библиотека NTL.

Скачать библиотеку можно отсюда;
Здесь; довольно подробный мануал.

Библиотеку надо собрать вручную. В windows можно использовать Visual Studio (процесс поэтапно расписан в туториале на официальном сайте). В linux всё стандартно.

Если при компиляции вылетит огромное количество ошибок, надо покопаться в cinfig.h. мне помогла замена
#if 1
#define NTL_STD_CXX

на
#if 0
#define NTL_STD_CXX


После того, как библиотека готова, осталось только подключить ее к проекту. Теперь мы можем работать со сколь угодно большими числами.

Пример:

#include <NTL/ZZ.h>
NTL_CLIENT

int main()
{
   ZZ a, b, c;

   cin >> a;
   cin >> b;
   c = (a+1)*(b+1);
   cout << c << "\n";
}


На сколько бы большие целые мы не ввели в переменные a и b, всё работает корректно.

Хочется так же отметить, что под Linux-ом можно добиться куда большей производительности благодаря возможности подключить GMP;. Как это сделать написано тут.
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх