题目描述
用高精度计算出S=1!+2!+3!+…+n!(n≤50)
其中“!”表示阶乘,例如:5!=5*4*3*2*1。
输入格式
一个正整数N。
输出格式
一个正整数S,表示计算结果。
附我的错误源代码,求改正!
#include<bits/stdc++.h>
using namespace std;
int a[75],b[75],c[76];
string Mult(string as,int x){
memset(a,0,sizeof(a));
memset(b,0,sizeof(c));
string cs;
int al=as.size();
int cl=al;
for(int i=1;i<=al;i++) a[i]=as[al-i]-'0';
for(int i=1;i<=cl;i++){
c[i]+=a[i]*x;
c[i+1]+=c[i]/10;
c[i]%=10;
}
int n=c[cl+1];
while(n){
c[++cl]=n%10;
n/=10;
}
while(c[cl]==0&&cl>1) cl--;
for(int i=cl;i>=1;i--) cs+=c[i]+'0';
return cs;
}
string Add(string as,string bs){
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
string cs;
int al=as.size(),bl=bs.size();
int cl=max(al,bl)+1;
for(int i=1;i<=al;i++) a[i]=as[al-i]-'0';
for(int i=1;i<=bl;i++) b[i]=bs[cl-i]-'0';
for(int i=1;i<=cl;i++){
c[i]+=a[i]+b[i];
c[i+1]=c[i]/10;
c[i]%=10;
}
while(c[cl]==0&&cl>1) cl--;
for(int i=cl;i>=1;i--) cs+=c[i]+'0';
return cs;
}
int main(){
int n;
cin>>n;
string sum="0";
for(int i=1;i<=n;i++){
string cum="1";
for(int j=1;j<=i;j++){
cum=Mult(cum,j);
}
cout<<cum<<endl;
sum=Add(sum,cum);
}
cout<<sum;
return 0;
}