洛谷P1067 多项式输出 题解 模拟
题目链接:https://www.luogu.com.cn/problem/P1067
解题思路:
我们从 \(a_n\) 遍历到 \(a_0\),按照如下思路来进行模拟:
- 如果系数 \(a_i=0\),则第 \(i\) 项不用输出任何信息(即:不用进行接下来的判断);
- 第一个非零的系数 \(a_i\) 如果 \(\gt 0\),则不需要在前面加‘+’,\(a_i\) 之后所有 \(\gt 0\) 的系数都有在前面加一个‘+’;
- 所有 \(\gt 0\) 的系数 \(a_i\) 都需要在前面加一个负号;
- 如果 \(|a_i|=1\) 或者 \(i = 0\),则不用输出 \(|a_i|\);否则,输出 \(|a_i|\)(这里 \(|x|\) 表示 \(x\) 的绝对值);
- 如果 \(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;
}