题目描述
用高精度计算出 S=1!+2!+3!+…+n!,其中 !表示阶乘,例如:5!=5×4×3×2×1。
输入正整数 n,输出计算结果 S。
样例
//注意:不可在mul中直接对A进行处理,否则会显示空,应当先对c操作,再让c赋值为A
#include<iostream>
#include<vector>
using namespace std;
const int N = 110;
int s[N];
void mul(vector<int>&A,int x)
{
int t = 0;
vector<int>c;
for (int i = 0; i <A.size()||t;i++)
{
if(i<A.size())t += A[i] * x;
c.push_back(t % 10);
t /= 10;
}
while (A.size() > 1 && A.back() == 0) c.pop_back();
A = c;
}
int main()
{
int n;
cin >> n;
while (n)
{
vector<int>c;
c.push_back(1);
for (int i = 1; i <= n; i++)
{
mul(c,i);
}
for (int i = 0; i < c.size(); i++)
s[i] += c[i];
n--;
}
for (int i = 0; i < N; i++)
{
if (s[i] > 9)
{
s[i + 1] += s[i] / 10;
s[i] %= 10;
}
}
int w = 0;
for (int i = N - 1; i >= 0; i--)
{
if (s[i] != 0)
{
w = i;
break;
}
}
for (int i = w; i >= 0; i--) cout << s[i];
return 0;
}