You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++单变量多项式相加时项数/阶数不同输出乱码的问题求解

C++多项式加法代码问题修复方案

核心问题原因

  • add函数中指数相等的分支没有加花括号,导致逻辑完全错乱:只有设置指数的代码属于else分支,系数相加、下标k/i/j自增的代码无论前面的判断是否成立都会执行。当两个多项式项数/指数顺序不匹配时,会出现数组越界访问、变量异常自增、非法赋值的问题,直接导致输出乱码。
  • 代码默认要求输入的多项式项按指数降序排列,但没有做输入校验也没有相关提示,若用户输入顺序不对也会导致结果异常。

具体修复代码

核心add函数修复

给指数相等的分支加上花括号,把所有相关逻辑包裹在内:

Poly* Poly :: add(Poly &p2)
{
    int i,j,k;
    Poly* sum  = new Poly(n+p2.n);
    i = j = k = 0 ;

    while(i<n && j<p2.n)
    {
        if(terms[i].exp>p2.terms[j].exp)
        {
            sum->terms[k++] = terms[i++];
        }
        else if(terms[i].exp<p2.terms[j].exp)
        {
            sum->terms[k++] = p2.terms[j++];
        }
        else
        {
            sum->terms[k].exp = terms[i].exp;
            sum->terms[k].coeff = terms[i].coeff + p2.terms[j].coeff;
            k++;
            i++;
            j++;
        }
    }

    for(;i<n;i++)
    {
        sum->terms[k++] = terms[i];
    }

    for(;j<p2.n;j++)
    {
        sum->terms[k++] = p2.terms[j];
    }
    
    sum->n  = k;
    return sum ;
}

可选优化点

  1. 优化Display函数,去掉末尾多余的+号:
void Poly::Display()
{
    for(int i = 0;i<n;i++)
    {
        if(i != 0) cout << " + ";
        cout << terms[i].coeff << "x" << terms[i].exp;
    }
}
  1. create函数增加输入提示,告知用户输入规则:
void Poly::create()
{
    cout << "请按指数从大到小的顺序输入" << n << "个项的系数和指数:" << endl;
    for(int i = 0; i<n;i++)
    {
        cin >> terms[i].coeff >> terms[i].exp ;
    }
}
  1. main函数末尾释放堆内存避免泄漏:
// main函数return前添加
delete p3;
return 0;

修复后验证

你提供的测试用例2修复后输出如下,结果完全符合预期:

3x5 + 2x4 + 8x3 + 4x2 + 6x1
-------
7x5 + 4x3 + 8x1 + 2x0
------------
10x5 + 2x4 + 12x3 + 4x2 + 14x1 + 2x0

内容的提问来源于stack exchange,提问作者Quenti_20

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 17:24:03