あなたの問題の理由は単純です.C++ではLong Long intで最大です。範囲は ~10^18 です。そのため、それより大きい数値を格納することはできません。そして100!158桁なので、ベクトル/配列を使用できない限り、その数値をC++/Cに格納する方法はありません
あなたは新しいプログラマーで、C++/C のみを使用しています。
次に、プログラミング目的(アルゴリズムまたはプログラミング コンテストの目的)で GMP ライブラリを使用することはお勧めしません。
独自に実装して使用できると思います..私はこれをプログラミングコンテストとアルゴリズムの問題で自分の目的のために使用しています.
// Shashank Jain
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#define LL long long int
using namespace std;
vector<int> fact;
void do_it(int num)
{
int temp,carry;
vector<int>:: iterator it;
carry=0;
for(it=fact.begin();it!=fact.end();it++)
{
temp=(*it)*num;
temp+=carry;
*it=temp%10;
carry=temp/10;
}
if(carry!=0)
{
while(carry>0)
{
temp=carry%10;
fact.push_back(temp);
carry/=10;
}
}
}
int main()
{
int num,i,l;
cin>>num; // enter number for which you want to get factorial
fact.push_back(1);
for(i=2;i<=num;i++)
do_it(i);
l=fact.size();
cout<<"The Length of factorial is: "<<l<<endl;
for(i=l-1;i>=0;i--)
{
cout<<fact[i];
}
cout<<endl;
return 0;
}
Ideone でのコード リンクの実行
これにより、2000 の階乗を 1 秒未満で簡単に取得できます。または、GMPライブラリを使用できます。ただし、Google Code jam や Facebook Hacker Cup などのプログラミング コンテストでは使用できません。またはトップコーダーまたはその他の標準的なプログラミングコンテスト