OneCoder Avatar
OneCodercoderli.com · 937 篇博文
二级

C++ 算法考级专栏

真题分析、矩阵探测、递归回溯与基础语法

🎨 视觉封面

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

📅 2025-01-04·✍️ OneCoder·计算中...·⏱️ 4 分钟
#GESP#C++#数学函数

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

luogu-B2080 计算多项式的值

题目要求

题目描述

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

输入格式

输入仅一行,包括 xxnn,用单个空格隔开。

输出格式

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

样例输入 #1

BASH
2.0 4

样例输出 #1

BASH
31.00

数据范围

xx 在 double 范围内,n1000000n \le 1000000


题目分析

  1. 题目要求计算形如 xn+xn1+...+x2+x+1x^n+x^{n-1}+...+x^2+x+1 的多项式的值。输入包含两个数:浮点数 xx 和整数 nn
  2. 解题思路有两种:
    • 方法一:直接循环累加。从 i=0i=0nn 循环,每次计算 xix^i 并累加到结果中。
    • 方法二:使用等比数列求和公式。该多项式实际上是首项为 1,公比为 x,项数为 n+1 的等比数列的和。可以直接使用公式 Sn+1=1xn+11xS_{n+1}=\frac{1-x^{n+1}}{1-x} 计算。
  3. 最后按要求输出结果,保留两位小数。需要注意当 x=1x=1 时要特殊处理,此时结果直接为 n+1n+1

示例代码

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

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

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

💡 OneCoder 资源指引

所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI

🤝 技术交流与答疑

欢迎加入:C++ GESP/CSP 考级答疑群(688906745)Java/Python交流群(982860385),点击可直接加群。

📚

猜你想读 · 相关文章推荐

OneCoder

OneCoder (lihongzheshuai)

一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com

💬 读者留言与交流

0 条讨论
✨ 支持 Markdown 语法格式
还没有留言,快来成为第一个讨论者吧!