1296. 求1!+2!+3!+4!+...+n!
问题描述
请求出 1!+2!+3!+4!+...+n!,请注意,n≤50 。
n!=n∗(n−1)∗(n−2)∗...∗1 ,如:5!=5∗4∗3∗2∗1=120。
输入
请输入一个整数 n(n≤50)。
输出
输出求和的结果。
样例
输入
10
输出
4037913
语言 C++
代码:
#include <bits/stdc++.h>
#include<string>
#include<algorithm>
using namespace std;
string ch(string r,int q){
int t=0,i,j,d,a[32767]={},b[32767]={},c[32767]={},e[32767]={};
int l,l1; string s,s1,result;
s = r; s1 = to_string(q);
l=s.size(); l1=s1.size();
for(i=0;i<=l-1;i++){
a[i]=s[l-1-i]-'0';
}
for(i=0;i<=l1-1;i++){
b[i]=s1[l1-1-i]-'0';
}
for(i=0;i<=l-1;i++){
for(j=0;j<=l1-1;j++){
c[i+j]+=a[i]*b[j];
c[i+j+1]+=c[i+j]/10;
c[i+j]=c[i+j]%10;
}
}
d=l+l1;
for(i=d;i>=0;i--){
if(c[i]==0&&d>=1){
d--;
}
else{
break;
}
}
for(i=d;i>=0;i--){
result+=char(c[i]+'0');
}
return result;
}
string dh(string f,string r){
int i,l,l1,a[32767]={},b[32767]={},c[32767],d,t=0;
string s,s1,result; s=f; s1=r; l=s.size();
l1=s1.size();
d=max(l,l1);
for(i=0;i<=l-1;i++){
a[i]=s[l-1-i]-'0';
}
for(i=0;i<=l1-1;i++){
b[i]=s1[l1-1-i]-'0';
}
for(i=0;i<=d-1;i++){
c[i]=(a[i]+b[i]+t)%10;
t=(a[i]+b[i]+t)/10;
}
if (t==1){
cout<<1;
}
for(i=d-1;i>=0;i--){
result += char(c[i]+'0');
}
return result;
}
int main(){
int i,n,j; string r,s;
cin>>n;
for(i=1;i<=n;i++){
r="1";
for(j=1;j<=i;j++){
r=ch(r,j);
}
s=dh(s,r);
}
cout<<s;
}