求出 e 的值

求出 e 的值

GESP二级练习,循环语句嵌套,难度★✮☆☆☆。

luogu-B2079 求出 e 的值

题目要求

题目描述

利用公式 e=1+1/1!+1/2!+1/3!++1/n!e=1+1/1!+1/2!+1/3!+ \cdots +1/n!,求 ee 的值,要求保留小数点后 1010 位。

输入格式

输入只有一行,该行包含一个整数 nn,表示计算 ee 时累加到 1/n!1/n!

输出格式

输出只有一行,该行包含计算出来的 ee 的值,要求打印小数点后 1010 位。

样例输入 #1

10

样例输出 #1

2.7182818011

数据范围

2n152 \le n \le 15


题目分析

  1. 读取输入的整数 nn,表示计算 ee 时累加到 1/n!1/n!
  2. 使用循环从 11nn,计算每个项的值并累加到 ee 的值中。具体来说,循环中计算每个项的值时,需要计算 i!i!,然后将 11 除以 i!i!,得到当前项的值。将这个值累加到 ee 的值中,得到最终的 ee 值。
  3. 输出计算得到的 ee 的值,保留小数点后 1010 位。

{% include custom/custom-post-content-inner.html %}

示例代码

#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;
}

{% include custom/custom-post-content-footer.md %}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

luogu-”系列题目可在 洛谷题库 在线评测。

bcqm-”系列题目可在 编程启蒙题库 在线评测。

GESP/CSP 认证学习微信公众号
GESP/CSP 认证学习微信公众号
Last updated on