Description
计算出 N=1!+2!+3!+⋯+n!(n≤50)。
其中 !
表示阶乘,定义为 n!=1×(n−1)×(n−2)×⋯×1。例如,5!=5×4×3×2×1=120.
输入
一个正整数 n。
输出
一个正整数 N,表示结果。
Sample Input
5
Sample Output
153
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, a[105] = {0}, b[105] = {0};
cin >> n;
a[100] = 1;
b[100] = 1;
for (int j = 2; j <= n; j++)
{ // b[i]中存的是最终结果从100向前是从低位到高位
int g = 0; // g记录进位值
for (int i = 100; i >= 0; i--)
{ // a[i]记录阶乘
a[i] = a[i] * j + g;
g = a[i] / 10; // 有进位将保存在a[99]以后类推
a[i] = a[i] % 10; // a[100]保留低位
}
int m = 0;
for (int i = 100; i >= 0; i--)
{ // 阶乘和
b[i] = b[i] + a[i] + m;
m = b[i] / 10; // 同样记录进位
b[i] = b[i] % 10;
}
}
int cnt;
for (int i = 0; i <= 100; i++)
{
if (b[i] != 0)
{ // 找到第一个不为0的位
cnt = i;
break;
}
}
for (int i = cnt; i <= 100; i++)
{ // 从这个位出发输出结果
cout << b[i];
}
return 0;
}