Программа для поиска факториала 10000 в c++
Есть ли какой-либо способ сохранить значение, которое превышает диапазон всех типов данных в C++?
Как запрограммировать сохранение результата факториала 10000
#include <iostream> #include "bigint.h" using namespace std; int main() { int i; int n = 69; RossiBigInt nfactorial(1); for (i = 2; i <= n; i++) { RossiBigInt bigi(i); nfactorial = nfactorial * bigi; cout << i << " factorial = " << nfactorial << endl; } return 0; }
bigint
пройдите по этой ссылке. http://groups.google.com/group/sources/msg/496e8d3ae812abbb[^]
Мой 5. Я только что исправил теги для форматирования кода.
То, что вы хотите использовать, это Большое число класс или библиотека. Поищите в google, чтобы найти его. Например:
https://mattmccutchen.net/bigint/[^]
Я использую Библиотека Теории Чисел[^] для работы с большими целыми числами. Это хорошо работало для моих нужд.
#include<stdio.h> #include<iostream> #include<algorithm> #define forr(i,a,b) for(int i=(a);i<(b);++i) #define forn(i,n) forr(i,0,n) #define dforn(i,n) for(int i=n-1;i>=0;--i) #define forall(it,v) for(auto it=v.begin();it!=v.end();++it) #define fst first #define snd second #define sz(c) ((int)c.size()) #define MAXP 1000000 #define BASE 1000000 #define LMAX 10000 using namespace std; typedef long long ll; struct bint { int l;//LONGITUD ll n[LMAX];//EL NUMERO bint(ll x = 0) { l = 1; forn(i, LMAX) { if (x) l = i + 1; n[i] = x % BASE; x /= BASE; } } void out() { cout << n[l - 1]; dforn(i, l - 1) printf("%6.6llu", n[i]); } void invar() { fill(n + l, n + LMAX, 0); while (l > 1 && !n[l - 1]) l--; } }; bint operator*(const bint & a, ll b) { bint c; ll q = 0; forn(i, a.l) q += a.n[i] * b, c.n[i] = q % BASE, q /= BASE; c.l = a.l; while (q) c.n[c.l++] = q % BASE, q /= BASE; c.invar(); return c; } int main() { int n = 10000; bint res(1); for (int i = 1; i <= n; ++i) { res = res * i; } res.out(); }