题目描述
用高精度计算出 𝑆=1!+2!+3!+⋯+𝑛!S=1!+2!+3!+⋯+n!(𝑛≤50n≤50)。
其中 ! 表示阶乘,定义为 𝑛!=𝑛×(𝑛−1)×(𝑛−2)×⋯×1n!=n×(n−1)×(n−2)×⋯×1。例如,5!=5×4×3×2×1=1205!=5×4×3×2×1=120。
输入格式
一个正整数 𝑛n。
输出格式
一个正整数 𝑆S,表示计算结果。
输入输出样例
输入 #1复制
3
输出 #1复制
9
说明/提示
【数据范围】
对于 100%100% 的数据,1≤𝑛≤501≤n≤50。
【其他说明】
注,《深入浅出基础篇》中使用本题作为例题,但是其数据范围只有 𝑛≤20n≤20,使用书中的代码无法通过本题。
如果希望通过本题,请继续学习第八章高精度的知识。
NOIP1998 普及组 第二题
代码:
#include<iostream>
using namespace std;
int s[1001] = { 0 }, m[1001] = { 0 };
void mults(int x) {
int num = 0;
for (int i = 1000; i >= 0; i--) {
m[i] = m[i] * x + num;
num = m[i] / 10;
m[i] = m[i] % 10;
}
}
void sum() {
int num = 0;
for (int i = 1000; i >= 0; i--) {
s[i] = s[i] + m[i] + num;
num = s[i] / 10;
s[i] = s[i] % 10;
}
}
void print() {
int unnull;
for (int i = 0; i < 1001; i++) {
if (s[i] != 0) {
unnull = i;
break;
}
}
for (int i = unnull; i < 1001; i++) {
cout << s[i];
}
cout << endl;
}
int main() {
s[1000] = m[1000] = 1;
int n; cin >> n;
if (n == 1) cout << 1 << endl;
else {
for (int i = 2; i <= n; i++) {
mults(i);
sum();
}
}
print();
return 0;
}
1万+

被折叠的 条评论
为什么被折叠?



