#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, a[1000] = {0}, b[1000] = {0};//a[]计算,b[]储存结果
cin >> n;
int len_a = 1, len_b = 1;//有效长度
int t = 0;//进位计算
for (int i = n; i >= 1; i--)
{
a[0] += 1;//阶乘计算
for (int m = 0, t = 0; m < len_b; m++)
{
if (m < len_a)
{
b[m] = t + a[m] * i;//若有进位
}
if (b[m] > 9 && len_b < m + 2)
{
len_b = m + 2;
}
b[m + 1] = b[m + 1] + (b[m] / 10);
t = b[m] / 10;//进位的大小
b[m] %= 10;
a[m] = b[m];//把结果赋值给a[]用来下一次计算
}
len_a = len_b;
}
for (int i = len_a-1; i >= 0; i--)
{
cout << a[i];
}
}
这里使用(n*(sum+1)+1)*(n-1)这样一直加1后再乘一直到1就是阶乘结果。