15:阶乘和
-
总时间限制:
- 1000ms 内存限制:
- 65536kB
-
描述
-
用高精度计算出S=1!+2!+3!+…+n!(n≤50)
其中“!”表示阶乘,例如:5!=5*4*3*2*1。
输入正整数N,输出计算结果S。
输入
- 一个正整数N。 输出
- 计算结果S。 样例输入
-
5
样例输出
-
153
来源 NOIP1998复赛 普及组 第二题
//noi_1733
#include<iostream>
#include<cstring>
#include<iomanip>
using namespace std;
int c[105]={0};
int d[105]={0};
void factoriala(int a[],int b){
for(int i=1;i<=a[0];i++){
a[i]=a[i]*b;
}
for(int i=1;i<=a[0];i++){
a[i+1]+=a[i]/10;
a[i]=a[i]%10;
}
while(a[a[0]+1]>0){
a[0]++;
a[a[0]+1]=a[a[0]]/10;
a[a[0]]=a[a[0]]%10;
}
}
void printa(int a[]){
if(a[0]==0) {
cout<<0;
return;
}
for(int i=1;i<=a[0];i++){
cout<<a[a[0]+1-i];
}
}
void plusa(int a[],int b[]){
if(b[0]>a[0]) a[0]=b[0];
for(int i=1;i<=a[0];i++){
a[i]=a[i]+b[i];
a[i+1]+=a[i]/10;
a[i]%=10;
}
if(a[a[0]+1]) a[0]++;
}
int main(){
int n;
c[0]=1;
c[1]=1;
cin>>n;
for(int i=1;i<=n;i++){
factoriala(c,i);
plusa(d,c);
}
printa(d);
return 0;
}