阶乘之和

来源:互联网 发布:淘宝网开店哪里进货源 编辑:程序博客网 时间:2024/06/07 07:51

题目描述

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

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

输入输出格式

输入格式:

一个正整数N。

输出格式:

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

输入输出样例

输入样例#1:
3
输出样例#1:
9
用高精度算法
直接上代码:

#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>using namespace std;struct number{int x[1000];int len;number(int a=0){if(a==0){memset(x,0,sizeof(x));len=0;}if(a==1){x[0]=1;len=1;}}void print(){for(int i=len-1;i>=0;i--)printf("%d",x[i]);printf("\n");}};number chengfa(number a,int n){number res;res.len=a.len;for(int i=0;i<res.len;i++){res.x[i]+=a.x[i]*n;res.x[i+1]+=res.x[i]/10;res.x[i]%=10;}while(res.x[res.len]){res.x[res.len+1]+=res.x[res.len]/10;res.x[res.len]%=10;res.len++;}return res;}number jiafa(number ans,number a){number res;res.len=max(ans.len,a.len);for(int i=0;i<res.len;i++){res.x[i]+=ans.x[i]+a.x[i];res.x[i+1]+=res.x[i]/10;res.x[i]%=10;}while(res.x[res.len]){res.x[res.len+1]+=res.x[res.len]/10;res.x[res.len]%=10;res.len++;}return res;}number getans(int n){//S=1!+2!+3!+…+n!number ans;for(int i=1;i<=n;i++){number res=1;for(int j=1;j<=i;j++)res=chengfa(res,j);ans=jiafa(ans,res);}return ans;}int main(){int i,j,k,m,n;scanf("%d",&n);number ans;ans=getans(n);ans.print();return 0;}


0 0