我的洛谷团队:https://www.luogu.com.cn/team/34776#main
题目描述
用高精度计算出S=1!+2!+3!+…+n! (n≤50)S=1!+2!+3!+…+n!(n≤50)
其中“!”表示阶乘,例如:5!=5 \times 4 \times 3 \times 2 \times 15!=5×4×3×2×1。
输入格式
一个正整数NN。
输出格式
一个正整数SS,表示计算结果。
输入输出样例
输入
3
输出
9
#include<bits/stdc++.h>
using namespace std;
int a[2000];
int b[2000];
int c[2000];
int sum[2000];
void pp(int *a,int *c) {
int j=0;
for(int i=1; i<=1000; i++) {
c[i]+=a[i]+j;
j=c[i]/10;
c[i]%=10;
}
}
void ffx(int *a,int c) {
int j=0;
for(int i=1; i<=1000; i++) {
a[i]=a[i]*c+j;
j=a[i]/10;
a[i]%=10;
}
}
int main() {
int n;
cin>>n;
a[1]=1;
for(int i=1; i<=n; i++) {
ffx(a,i);
pp(a,c);
}
bool f=0;
for(int i=1000; i>=1; i--) {
if(c[i]!=0) {
f=1;
}
if(f) {
cout<<c[i];
}
}
return 0;
}