题目描述
用高精度计算出 S = 1! + 2! + 3! +… + n!(n≤50)。
其中“!”表示阶乘,例如:5! =5×4×3×2×1。
题目链接 https://www.luogu.com.cn/problem/P1009
#include<iostream>
#include<vector>
using namespace std;
vector<int> Mul(vector<int> &A,int b)
{
vector<int> C;
int t = 0;
for (int i = 0; i < A.size()||t; i++)
{
if(i<A.size()) t += A[i]*b;
C.push_back(t%10);
t/=10;
}
while(C.size()>1&&C.back()==0) C.pop_back();
return C;
}
vector<int> Add(vector<int> A,vector<int>B)
{
vector<int> C;
int t =0;
for(int i = 0;i<A.size() || i<B.size();i++)
{
if(i< A.size()) t += A[i];
if(i < B.size()) t += B[i];
C.push_back(t%10);
t /= 10;
}
if(t) C.push_back(1);
return C;
}
int main()
{
int n;
cin >> n;
vector<int> a,c;
c.push_back(0);
a.push_back(1);
for (int i = 1; i <= n; i++)
{
a = Mul(a,i);
c = Add(c,a);
}
for(int i = c.size() -1;i>=0;i--) printf("%d",c[i]);
return 0;
}
大佬写的太棒了