题目描述
用高精度计算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示阶乘,例如:5!=54321。
输入格式
一个数 n
输出格式
题目所要求的的 S
样例
【样例输入】
5
【样例输出】
153
题解:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 1001;
int a[maxn], b[maxn], n;
void input() {
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
scanf("%d", &n);
a[maxn - 1] = 1;
}
void mul(int t) {
int s, g = 0;
for (int i = maxn - 1; i > 0; i--) {
s = a[i] * t + g;
a[i] = s % 10;
g = s / 10;
}
}
void add() {
int s, g;
for (int i = maxn - 1; i > 0; i--) {
s = a[i] + b[i] + g;
b[i] = s % 10;
g = s / 10;
}
}
void output() {
int i = 1;
while (b[i] == 0 && i < maxn) i++;
for (int j = i; j < maxn; j++) printf("%d", b[j]);
}
int main() {
input();
for (int i = 1; i <= n; i++) {
mul(i);
add();
}
output();
return 0;
}