洛谷 P1009 阶乘之和

来源:互联网 发布:国内西装品牌 知乎 编辑:程序博客网 时间:2024/06/03 21:25

题目描述

用高精度计算出S=1!+2!+3!+…+n!(n≤50)

其中“!”表示阶乘,例如:5!=5*4*3*2*1。

输入输出格式

输入格式:

一个正整数N。

输出格式:

一个正整数S,表示计算结果。

输入输出样例

输入样例#1:
3
输出样例#1:
9






~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

高精度~

***


#include<cstdio>#define max(u,v) u>v ? u:vint n,s[100],k[100];void cheng(int u){int x=0;for(int i=1;i<=k[0];i++){k[i]=k[i]*u+x;if(k[i]>=10) x=k[i]/10;k[i]%=10;}while(x>=10){k[++k[0]]=x%10;x/=10;}}void jia(){int x=0,z=max(k[0],s[0]);for(int i=1;i<=z;i++){s[i]=s[i]+k[i]+x;x=s[i]/10;s[i]%=10;}s[0]=z;while(x>=10){s[++s[0]]=x%10;x/=10;}}int main(){scanf("%d",&n);k[1]=1;k[0]=1;s[0]=1;s[1]=1;for(int i=2;i<=n;i++){cheng(i);jia();}for(int i=s[0];i>=1;i--) printf("%d",s[i]);return 0;}

1 0