题目描述
用高精度计算出 S=1!+2!+3!+⋯+n!(n≤50)。
其中 !
表示阶乘,定义为n!=n×(n−1)×(n−2)×⋯×1。例如,5!=5×4×3×2×1=120。
输入格式
一个正整数 n。
输出格式
一个正整数 S,表示计算结果。
输入输出样例
输入
3
输出
9
说明/提示
【数据范围】
对于100% 的数据,1≤n≤50
_____________________________________________________________________________
写作不易,点个赞呗!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
一道非常水的贪心题,希望有人看!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
_____________________________________________________________________________
#include <bits/stdc++.h>
using namespace std;
int len=1,anslen,n,t[1000005],ans[1000005];
void j(int v){计算n的阶乘
for(int i=1;i<=len;i++)t[i]*=v;每个数位乘v
int i=1;
while((t[i]>9)||(i<len)){判断是否需要进位
t[i+1]+=t[i]/10;进位
t[i]%=10;只保留个位数
i++;继续对下一位进行处理
}
len=i;
}
void jia(){计算1!+2!+3!+...+n!
for(int i=1;i<=len;i++){
ans[i]+=t[i];对每一位都相加
if(ans[i]>9){满足进位条件
ans[i+1]+=ans[i]/10;进位
ans[i]%=10;只保留个位
anslen=max(anslen,i+1);
}
anslen=max(anslen,i);判断当前数的数位,避免多余的计算
}
}
int main(){
cin>>n;
t[len]=1;
for(int i=1;i<=n;i++){
j(i);
jia();
}
for(int i=anslen;i>=1;i--)倒序输出
cout<<ans[i];
}