题目链接: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;
}