简单问题的原因。在 Long Long int 中最大的 C++ 中。它的范围为~10 ^ 18。所以你不能存储大于那个的数字。和100!其中有 158 位数字,因此除非您可以使用向量/数组,否则您无法将该数字存储在 C++/C 中
您是一名新程序员,并且您正在使用 Only 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 上运行代码链接
这可以在不到 1 秒的时间内轻松获得 2000 的阶乘。否则您可以使用 GMP 库。但是这些是不允许参加像 Google Code jam 或 Facebook Hacker Cup 这样的编程竞赛的。或 topcoder 或任何其他标准编程竞赛