P1067. 多项式输出

考点

  • 模拟
  • 字符串

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <bits/stdc++.h>

using namespace std;

int main()
{
int n, t;
cin >> n;
for (int i = n; i >= 0; --i)
{
cin >> t;
//不在头且常数大于0时,需要输出加号
if (i != n && t > 0)
cout << "+";
// 输出数字的情况:
// t不等于-1、0和1,
// 或者幂次为0
if (abs(t) > 1 || (i == 0 && t != 0))
cout << t;
//只剩-1需要处理
if (t == -1 && i != 0)
cout << "-";
if (i > 1 && t)
cout << "x^" << i;
else if (i == 1 && t)
cout << "x";
}
return 0;
}

思路

字符串的问题,首先判断逐词读入还是整句读入;本题当然是逐次读入比较方便

得到常数项t和幂次i后,任务如下:

  1. 本次是否输出,直接判断常数是否为0即可
  2. 常数项的处理
  3. 自变量的处理

先来看常数项的处理:

  1. 什么时候输出+号?

    常数不在开头,且大于0

  2. 如何输出数?

    只要不是-1、0和1这三个数,任何地方都可以直接输出

    能输出-1和1的地方,只有幂次等于0的时候

  3. 什么时候输出-号?

    其实第2点已经基本处理完了,只剩一种情况,-1在多项式中间,此时只要输出一个-号即可

再来看自变量的处理:

  1. 什么时候输出x号?

    幂次为1且常数项不为0

  2. 什么时候输出x^号?

    幂次大于1且常数项不为0

综上,即可得到代码