题目
分析
先考虑一般情况。丢与某个特定项,根据系数和次数,我们需要构造的是形如{coeff}x^{power}(比如:+3x^7这样的一个部分,然后通过拼接得到最后的结果。
有四个特殊情况:
- 如果系数为
0,直接跳过。 - 首项(最高次项)系数如果是正的,那么不应该输出(最终结果)字符串中的第一个
+号。 - 如果系数为
1,只要输出x^{power}即可。 - 如果是常数项(次数
power == 0),那么不用输出x^0而是只输出{coeff}。
这个思路清楚后,就是一个拼接过程。核心代码为:
for (int i = 0; i <= n; ++i)
{
int coeff = coefficients[i];
int power = n - i; // 当前项的指数
if (coeff == 0)
continue; // 跳过系数为0的项
// 统一添加符号
if (coeff > 0)
{
result += "+";
}
else
{
result += "-";
coeff = -coeff; // 取绝对值
}
// 添加系数
if (power == 0)
{
result += to_string(coeff); // 0次项
}
else if (power == 1)
{
if (coeff == 1)
{
result += "x"; // 1次项
}
else
{
result += to_string(coeff) + "x"; // 1次项
}
}
else
{
if (coeff == 1)
{
result += "x^" + to_string(power); // 高次项
}
else
{
result += to_string(coeff) + "x^" + to_string(power); // 高次项,这也是一般项
}
}
}
// 去掉开头的 + 号
if (result[0] == '+')
{
result = result.substr(1);
}
答案

思考
对于首项符号的处理,当前做法是统一先加符号(正加+,负加-),最后再去掉开头的+。更稳妥的方式是维护一个printed标记:如果尚未打印任何项且系数为正,则不加+;只有在已经打印过至少一项时才在正系数前加+,这样可以避免对空字符串做result[0]检查。但本题的做法也可以AC。
