题目
n! 的意思是 n × (n − 1) × … × 3 × 2 × 1
例如,10! = 10 × 9 × … × 3 × 2 × 1 = 3628800,所以10!的各位数字和是 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27。
求出100!的各位数字和。
分析思路
- 较大数字的阶乘结果需要开辟数组才能保存得下
- 每一步都是当前数字和上一步的结果的每一位相乘,然后进位
代码展示
#include<iostream>
using namespace std;
#define max_n 10000
int f[max_n + 5] = {1, 1};
int main() {
for (int i = 1; i <= 100; i++) {
for (int j = 1; j <= f[0]; j++) { // 上一步结果f的每一位都与当前的i相乘,结果保存在f中
f[j] *= i;
}
for (int k = 1; k <= f[0]; k++) { // 进位
if (f[k] < 10) continue;
f[k + 1] += f[k] / 10;
f[k] %= 10;
f[0] += (k == f[0]);
}
}
int sum = 0;
for (int i = f[0]; i > 0; i--) {
sum += f[i];
}
cout << sum;
return 0;
}