洛谷:P1067:多项式输出


洛谷:P1067:多项式输出

Table of Contents

题目

P1067:多项式输出

分析

先考虑一般情况。丢与某个特定项,根据系数和次数,我们需要构造的是形如{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);
}

答案

Solution

思考

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

Previous Next