1173:阶乘和
时间限制: 1000 ms 内存限制: 65536 KB
【题目描述】
用高精度计算出S=1!+2!+3!+…+n!(n≤50),其中“!”表示阶乘,例如:5!=5×4×3×2×1。
输入正整数n,输出计算结果S。
【输入】
一个正整数n。
【输出】
计算结果S。
【输入样例】
5
【输出样例】
153
【来源】
No
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int a[100000]={0};
int b[100000]={0};
int main()
{
int n,i,j,t,jw,len,len2;
scanf("%d",&n);
if(n==0){
printf("1");
return 0;
}
a[1]=1,len=1;
for(i=1;i<=n;i++){
j=1;
jw=0;
while(j<=len){
a[j]=a[j]*i+jw;
if(a[j]>=10){
jw=a[j]/10;
a[j]%=10;
}
else jw=0;
j++;
}
while(jw>0){
a[j]=jw%10;
jw/=10;
j++;
len++;
}
len2=len;
for(j=1;j<=len;j++){
b[j]=b[j]+a[j]+jw;
if(b[j]>=10){
jw=b[j]/10;
b[j]%=10;
}
else jw=0;
}
if(jw>0){
b[j]=jw;
len2++;
}
}
for(i=len2;i>=1;i--) printf("%d",b[i]);
return 0;
}