Класс bigint позволяет манипулировать с целыми числами без знака, диапазон значений которых ограничивается только доступными ресурсами системы. Есть две реализации больших целых чисел: bigint_kernel_1 и bigint_kernel_2. Единственное отличие bigint_kernel_2, это использование быстрого преобразования Фурье для выполнения операции умножения.
#include <iostream>
#include "../dlib/bigint.h"
typedef dlib::bigint::kernel_2a BigInt;
BigInt factorial(BigInt num);
int main(int ac, char** av)
{
std::cout << factorial(10000) << std::endl;
return 0;
}
/*
Для большого значения num лучше использовать один из
алгоритмов приведенных на странице:
http://www.luschny.de/math/factorial/FastFactorialFunctions.htm
*/
BigInt factorial(BigInt num)
{
BigInt result = 1;
for ( BigInt i=num; 0<i; i-- )
result *= i;
return result;
}
Вывод команды ./bigint | wc -m
35672