算法提高 高精度计算
问题描述
用高精度计算出S=1!+2!+3!+…+n!(n≤50)
其中“!”表示阶乘,例如:5!=54321。
输入正整数N,输出计算结果S。
输入格式
输入包含一个整数N(N<=50)
输出格式
输出为一个整数,为计算结果S。
#include<bits/stdc++.h>
using namespace std;
void multi(vector<int> &v,int x){
int t=0;
for(int i=0;i<v.size()||t;i++){
if(i>=v.size()){
v.push_back(t%10);
t/=10;
continue;
}
v[i]=v[i]*x+t;
t=v[i]/10;
v[i]%=10;
}
}
void addition(vector<int> &S,vector<int> v){
int t=0;
for(int i=0;i<v.size();i++){
if(i>=S.size()){
S.push_back(v[i]);
continue;
}
S[i]+=v[i];
}
for(int i=0;i<S.size()||t;i++){
if(i>=S.size()){
S.push_back(t%10);
t/=10;
continue;
}
S[i]+=t;
t=S[i]/10;
S[i]%=10;
}
}
int main(){
int n;
cin>>n;
vector<int> S;
S.push_back(1);
for(int i=2;i<=n;i++){
vector<int> v;
v.push_back(1);
for(int j=2;j<=i;j++){
multi(v,j);
}
addition(S,v);
}
for(int i=S.size()-1;i>=0;i--){
cout<<S[i];
}
}