用高精度计算出S=1!+2!+3!+…+n!(n ≤ 50)其中“!”表示阶乘,例如:5!=5*4*3*2*1。
输入描述:
输入正整数N
输出描述:
输出计算结果S
示例1
输入
3
输出
9
注:高精度阶乘与高精度加法
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int main(){
int m;
scanf("%d",&m);
int sum[10000]={0};
int t=-1;
for(int n=m;n>=1;n--){//倒叙循环
int len=1,carry=0;
int num[10000]={1};
for(int i=1;i<=n;i++){//计算阶乘
int j;
for(j=0;j<len;j++){
int temp=num[j]*i+carry;
num[j]=temp%10000;
carry=temp/10000;
}
if(carry!=0){
num[j]=carry;
len++;
carry=0;
}
}
int cary=0,ln=0;//进位,长度
t=max(t,len);
for(int i=0;i<t;i++){//求和
int temp=sum[i]+num[i]+cary;
sum[i]=temp%10000;
cary=temp/10000;
}
if(carry!=0){
sum[t]+=cary;
}
}
printf("%d",sum[t-1]);//输出
for(int i=t-2;i>=0;i--){
printf("%04d",sum[i]);
}
printf("\n");
return 0;
}