传送门
- 本题采用高精度加法和高精度乘法混合
#include<iostream>
using namespace std;
int a[5000],n,l=1,jw=0,b[5000],l1=1,j;
int main()
{
cin>>n;
b[1]=a[1]=1;
//高精度乘法
for(int i=2;i<=n;i++)
{
for(j=1;j<=l;j++)
{
a[j]=a[j]*i+jw;
jw=a[j]/10;
a[j]%=10;
}
while(jw>0)
{
a[j]=jw%10;
jw/=10;
j++;
l++;
}
//高精度加法
if(l1<l)
l1=l;
for(int k=1;k<=l1;k++)
{
b[k]+=a[k];
b[k+1]+=b[k]/10;
b[k]%=10;
}
l1++;
while(b[l1]==0&&l1>1) l1--;//判断进位
}
//for(int i=l;i>=1;i--)
//cout<<a[i];
for(int i=l1;i>=1;i--)
cout<<b[i];
return 0;
}