文章

【GESP】C++二级练习 luogu-B2080, 计算多项式的值

GESP二级练习,基本数学函数练习,难度★✮☆☆☆。

luogu-B2080 计算多项式的值

题目要求

题目描述

假定多项式的形式为 $x^n+x^{(n-1)}+$ … $+x^2+x+1$,请计算给定单精度浮点数 $x$ 和正整数 $n$ 值的情况下这个多项式的值。多项式的值精确到小数点后两位,保证最终结果在 double 范围内。

输入格式

输入仅一行,包括 $x$ 和 $n$,用单个空格隔开。

输出格式

输出一个实数,即多项式的值,精确到小数点后两位。保证最终结果在 double 范围内。

样例输入 #1

1
2.0 4

样例输出 #1

1
31.00

数据范围

$x$ 在 double 范围内,$n \le 1000000$。


题目分析

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

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <cstdio>
#include <iostream>
#include <cmath>
using namespace std;
int main() {
    int n; // 定义整数变量n
    double x; // 定义浮点数变量x
    cin >> x >> n; // 从输入流中读取x和n的值
    double ans = 1; // 初始化答案为1
    for (int i = 1; i <= n; i++) { // 从1到n进行循环
        double power = pow(x,i); // 计算x的i次方
        ans += power; // 将当前项的值累加到答案中
    }
    printf("%.2f", ans); // 输出答案,保留两位小数
    return 0;
}

当然也可以利用等比数列求和公式快速计算

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <cmath>
#include <cstdio>
#include <iostream>
using namespace std;
int main() {
    int n; // 定义整数变量n
    double x; // 定义浮点数变量x
    cin >> x >> n; // 从输入流中读取x和n的值
    double ans = 1; // 初始化答案为1
    ans += x * (1 - pow(x, n)) / (1 - x); // 使用等比数列求和公式计算答案
    printf("%.2f", ans); // 输出答案,保留两位小数
    return 0;
}

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

GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页

luogu-”系列题目已加入洛谷Java、C++初学团队作业清单,可在线评测,团队名额有限,欢迎加入。

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

本文由作者按照 CC BY 4.0 进行授权