用高精度计算出 S=1!+2!+3!+…+n!其中 ! 表示阶乘,例如:5!=5×4×3×2×1。
输入正整数 n,输出计算结果 S。
输入格式
一个正整数 n。
输出格式
一个正整数 S。
数据范围
1≤n≤50
输入样例:
6
输出样例:
873
#include<iostream>
#include<cstdio>
using namespace std;
int a[120],b[120];
//将加出来的结果给b
void add(int *a,int *b){//加法的时候,a和b都是高精度
int jw = 0;
for(int i = 1;i<=120;i++){
b[i] = b[i] +a[i] + jw;
jw = b[i]/10;
b[i] = b[i] %10;
}
}
//a给的是一个串,加*
void cheng(int *a, int c){
int jw = 0;//最开始进位是0
for(int i = 1;i<=120;i++){
a[i] = a[i] * c + jw;
jw = a[i]/10;
a[i] = a[i] %10;
}
}
int main(){
int n;
scanf("%d",&n);
a[1]=1;
for(int i=1;i<=n;i++){
cheng(a,i);
add(a,b);
}
bool flag = 0;//标记0,默认不能输出
for(int i = 120;i>=1;i--){
if(b[i]!=0)//要倒着输出,必定有多余的部分,存0,当不为0的时候才输出
flag = 1;
if(flag)//如果为真,说明前面有数,是有效部分
cout<<b[i];
}
return 0;
}