#include <bits/stdc++.h>
using namespace std;
string a = "1";
int na[1000005], nb[1000005], sum[2000005], i;
string mul(string a, string b) {
memset(na, 0, sizeof na);
memset(nb, 0, sizeof nb);
memset(sum, 0, sizeof sum);
string ans;
for(int i = 0;i < a.size();++i) na[i+1] = (int)a[i]-48;
for(int i = 0;i < b.size();++i) nb[i+1] = (int)b[i]-48;
for(int i = 1;i <= a.size();++i)
for(int j = 1;j <= b.size();++j)
sum[i+j-1] += na[i]*nb[j];
for(int i = a.size()+b.size()-1;i >= 1;--i)
sum[i-1] += sum[i]/10, sum[i] -= sum[i]/10*10;
for(int i = 0;i <= a.size()+b.size()-1;++i)
if(!i && sum[0]) ans += sum[0]+48;
else if(i) ans += sum[i]+48;
return ans;
}
int main() {
int n;
scanf("%d", &n);
for(int i = 1;i <= n;++i) {
string b, ans;
for(int j = pow(10, floor(log10(i)));j;j /= 10) b += i/j%10+48;
ans = mul(a, b);
a = ans;
}
cout << a;
return 0;
}
高精度阶乘模板
最新推荐文章于 2024-09-28 21:49:26 发布