【GESP】C++二级练习 luogu-B2079, 求出 e 的值
GESP二级练习,循环语句嵌套,难度★✮☆☆☆。
luogu-B2079 求出 e 的值
题目要求
题目描述
利用公式 $e=1+1/1!+1/2!+1/3!+ \cdots +1/n!$,求 $e$ 的值,要求保留小数点后 $10$ 位。
输入格式
输入只有一行,该行包含一个整数 $n$,表示计算 $e$ 时累加到 $1/n!$。
输出格式
输出只有一行,该行包含计算出来的 $e$ 的值,要求打印小数点后 $10$ 位。
样例输入 #1
1
10
样例输出 #1
1
2.7182818011
数据范围
$2 \le n \le 15$。
题目分析
- 读取输入的整数 $n$,表示计算 $e$ 时累加到 $1/n!$。
- 使用循环从 $1$ 到 $n$,计算每个项的值并累加到 $e$ 的值中。具体来说,循环中计算每个项的值时,需要计算 $i!$,然后将 $1$ 除以 $i!$,得到当前项的值。将这个值累加到 $e$ 的值中,得到最终的 $e$ 值。
- 输出计算得到的 $e$ 的值,保留小数点后 $10$ 位。
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
int n; // 输入的整数n,表示计算e时累加到1/n!
cin >> n; // 读取输入的n
double ans = 1; // 初始化答案为1,表示e的初始值
for (int i = 1; i <= n; i++) { // 从1到n累加
double tmp = 0; // 临时变量,用于存储当前项的值
long long denominator = 1; // 分母,用于计算i!
for (int j = 1; j <= i; j++) { // 计算i!
denominator *= j;
}
tmp = 1.0 / denominator; // 计算当前项的值
ans += tmp; // 累加当前项到答案中
}
printf("%.10f", ans); // 输出答案,保留10位小数
return 0;
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页
“luogu-”系列题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限,欢迎加入。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
本文由作者按照 CC BY 4.0 进行授权