среда, 26 октября 2011 г.

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

итак. разбираюсь со сверх большими числами. теми, которые ни в один тип не влазят.
нашел интересную библиотеку под это дело. NTL называется. качать отсюда www.shoup.net/ntl/download.html
пока тестил только под винду, но думаю под линух проблемм возникнуть не должно.
коротко, что надо сделать:
1. само собой распаковываем архив куда-нибудь аля c:\ntl
2. надо руками скомпилить библиотеку под себя. можно использовать vc, можно mingw. я делал в визуалке.
поэтапно
File -> New -> Projects 
project name: ntl
location: c:\ntl_lib
Win32 static library
OK
Finish
OK
Project -> Add to Project -> Files
добавляем всё из c:\ntl\WinNTL-xxx\src.
xxx - номер версии. будут какие-то числа
Project -> Settings -> C/C++ 
Категория: Preprocessor.
Additional include directories: c:\ntl\WinNTL-xxx\include.
Click on OK.
Build -> build ntl.lib
3. если вдруг компилироваться не будет, выдавая огромное количество ошибок, надо покопаться в cinfig.h. мне помогла замера

#if 1
#define NTL_STD_CXX

на

#if 0
#define NTL_STD_CXX

(поставили 0 - вырубили опцию)

Вот и всё. у нас есть либа. теперь подключаем ее к проекту и можем работать со сколь угодно большими числами...
пример:

#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, всё будет считаться.
вот еще примеры: www.shoup.net/ntl/doc/tour-examples.html

это круто.

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

Отправить комментарий