题解:洛谷 P1067 [NOIP 2009 普及组] 多项式输出

【题目来源】

洛谷:[P1067 NOIP 2009 普及组] 多项式输出 - 洛谷 (luogu.com.cn)

【题目描述】

一元 \(n\) 次多项式可用如下的表达式表示:

image

其中,\(a_ix^i\) 称为 \(i\) 次项,\(a_i\) 称为 \(i\) 次项的系数。给出一个一元多项式各项的次数和系数,请按照如下规定的格式要求输出该多项式:

  1. 多项式中自变量为 \(x\),从左到右按照次数递减顺序给出多项式。
  2. 多项式中只包含系数不为 \(0\) 的项。
  3. 如果多项式 \(n\) 次项系数为正,则多项式开头不出 + 号,如果多项式 \(n\) 次项系数为负,则多项式以 - 号开头。
  4. 对于不是最高次的项,以 + 号或者 - 号连接此项与前一项,分别表示此项系数为正或者系数为负。紧跟一个正整数,表示此项系数的绝对值(如果一个高于 \(0\) 次的项,其系数的绝对值为 \(1\),则无需输出 \(1\))。如果 \(x\) 的指数大于 \(1\),则接下来紧跟的指数部分的形式为“\(x^b\)”,其中 \(b\)\(x\) 的指数;如果 \(x\) 的指数为 \(1\),则接下来紧跟的指数部分形式为 \(x\);如果 \(x\) 的指数为 \(0\),则仅需输出系数即可。
  5. 多项式中,多项式的开头、结尾不含多余的空格。

【输入】

输入共有 \(2\)

第一行 \(1\) 个整数,\(n\),表示一元多项式的次数。

第二行有 \(n+1\) 个整数,其中第 \(i\) 个整数表示第 \(n-i+1\) 次项的系数,每两个整数之间用空格隔开。

【输出】

输出共 \(1\) 行,按题目所述格式输出多项式。

【输入样例】

5 
100 -1 1 -3 0 10

【输出样例】

100x^5-x^4+x^3-3x^2+10

【算法标签】

《洛谷 P1067 多项式输出》 #模拟# #字符串# #数学# #NOIP普及组# #2009#

【代码详解】

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n, a[105];  // n 表示多项式的最高次幂,a 数组存储多项式的系数
    cin >> n;  // 输入多项式的最高次幂

    // 从高次幂到低次幂依次输入系数
    for (int i = n; i >= 0; i--) 
        cin >> a[i];

    // 从高次幂到低次幂依次输出多项式
    for (int i = n; i >= 0; i--) 
	{
        // 如果当前项的系数为0,跳过不输出
        if (a[i] == 0) continue;

        // 如果多项式是常数项(n=0),直接输出常数项并结束循环
        if (n == 0) 
		{
            cout << a[i];
            break;
        }

        // 处理常数项(i=0)的情况
        if (i == 0) 
		{
            if (a[i] > 0) 
			{
                cout << "+" << a[i];  // 如果常数项为正,输出带加号的常数项
                break;
            } 
			else if (a[i] < 0) 
			{
                cout << a[i];  // 如果常数项为负,直接输出常数项
                break;
            }
        }

        // 处理非常数项的情况
        if (a[i] > 0) 
		{
            if (i != n) cout << "+";  // 如果不是最高次项,输出加号
            if (a[i] != 1) cout << a[i];  // 如果系数不为1,输出系数
        }
        if (a[i] < 0) 
		{
            if (a[i] == -1) cout << "-";  // 如果系数为-1,只输出负号
            else cout << a[i];  // 否则输出系数
        }

        // 输出指数项
        if (i > 1) printf("x^%d", i);  // 如果指数大于1,输出x的指数形式
        else if (i == 1) cout << "x";  // 如果指数为1,只输出x
    }

    return 0;
}

【运行结果】

3
-50 0 0 1
-50x^3+1
posted @ 2026-02-17 08:24  团爸讲算法  阅读(1)  评论(0)    收藏  举报