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 ; }
可选优化点
- 优化Display函数,去掉末尾多余的
+号:
void Poly::Display() { for(int i = 0;i<n;i++) { if(i != 0) cout << " + "; cout << terms[i].coeff << "x" << terms[i].exp; } }
- create函数增加输入提示,告知用户输入规则:
void Poly::create() { cout << "请按指数从大到小的顺序输入" << n << "个项的系数和指数:" << endl; for(int i = 0; i<n;i++) { cin >> terms[i].coeff >> terms[i].exp ; } }
- 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
相关产品推荐
相关产品推荐

