洛谷P1067 多项式输出 题解 模拟

题目链接:https://www.luogu.com.cn/problem/P1067

解题思路:
我们从 \(a_n\) 遍历到 \(a_0\),按照如下思路来进行模拟:

  1. 如果系数 \(a_i=0\),则第 \(i\) 项不用输出任何信息(即:不用进行接下来的判断);
  2. 第一个非零的系数 \(a_i\) 如果 \(\gt 0\),则不需要在前面加‘+’,\(a_i\) 之后所有 \(\gt 0\) 的系数都有在前面加一个‘+’;
  3. 所有 \(\gt 0\) 的系数 \(a_i\) 都需要在前面加一个负号;
  4. 如果 \(|a_i|=1\) 或者 \(i = 0\),则不用输出 \(|a_i|\);否则,输出 \(|a_i|\)(这里 \(|x|\) 表示 \(x\) 的绝对值);
  5. 如果 \(i>1\),需要输出 x^i 的格式;否则,如果 \(i=1\),只需要输出 x;否则(\(i=0\)),不需要输出带 x的信息。

按照这种思路,实现代码如下:

#include <bits/stdc++.h>
using namespace std;
int n, a;
bool flag;
int main() {
    cin >> n;
    for (int i = n; i >= 0; i --) {
        cin >> a;   // 我这里直接用a来表示参数ai了
        if (a != 0) {   // 对于为0的参数不需要输出任何信息
            if (!flag) {    // 如果是第一个非零系数
                flag = true;
                if (a < 0) cout << "-"; // 第一个非零系数如果是附属需要输出‘-’,是整数不需要输出‘+’
            }
            else {  // 如果不是第一个非零系数
                if (a > 0) cout << "+";
                else cout << "-";
            }
            if (abs(a) > 1 || i == 0) cout << abs(a); // 如果|ai|>1或者i==0,需要输出系数
            if (i > 1) cout << "x^" << i;   // 如果i>1,需要输出x^i
            else if (i == 1) cout << "x";   // 如果i==1,需要输出x
                                            // 否则,不需要输出
        }
    }
    return 0;
}
posted @ 2020-04-14 12:34  quanjun  阅读(93)  评论(0编辑  收藏  举报