【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$。
题目分析
- 题目要求计算形如 $x^n+x^{n-1}+…+x^2+x+1$ 的多项式的值。输入包含两个数:浮点数 $x$ 和整数 $n$。
- 解题思路有两种:
- 方法一:直接循环累加。从 $i=0$ 到 $n$ 循环,每次计算 $x^i$ 并累加到结果中。
- 方法二:使用等比数列求和公式。该多项式实际上是首项为 1,公比为 x,项数为 n+1 的等比数列的和。可以直接使用公式 $S_{n+1}=\frac{1-x^{n+1}}{1-x}$ 计算。
- 最后按要求输出结果,保留两位小数。需要注意当 $x=1$ 时要特殊处理,此时结果直接为 $n+1$。
示例代码
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 学习专题站:GESP WIKI
“luogu-”系列题目可在洛谷题库进行在线评测。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
欢迎加入:Java、C++、Python技术交流QQ群(982860385),大佬免费带队,有问必答
欢迎加入:C++ GESP/CSP认证学习QQ频道,考试资源总结汇总
欢迎加入:C++ GESP/CSP学习交流QQ群(688906745),考试认证学员交流,互帮互助
本文由作者按照 CC BY-NC-SA 4.0 进行授权