用std::vector存多项式系数最稳妥,下标对应幂次,如3x²+5存为{5,0,3};加法需对齐长度、逐项相加,越界索引视为0。

用 std::vector 存多项式系数最稳妥
直接用 C 风格数组(如 int a[100])表示多项式,看似简单,但容易越界、难扩容、无法自动记录实际项数。C++ 里更自然的做法是用 std::vector<int></int>,下标对应幂次,coeffs[i] 表示 $x^i$ 的系数。比如 $3x^2 + 5$ 就存为 {5, 0, 3}(常数项在 index 0)。这样加法时只要对齐下标相加即可,不用手动算最高幂。
注意:必须保证两个多项式都按「低次幂到高次幂」顺序存储,且长度一致——不够的高位补 0。否则加法结果错位。
多项式加法的核心是逐项相加,不是合并同类项
多项式加法不涉及“合并”逻辑,只是相同幂次系数相加。关键在于把两个 std::vector 拉齐长度:
- 取两者最大 size 作为结果长度
- 遍历 0 到 max_size−1,对每个 i 取
a[i]和b[i](越界则视为 0) - 结果
res[i] = (i
别写循环找非零项再合并——那是在做“化简”,不是加法;加法定义就是系数向量相加。
operator+ 重载要避免隐式截断和内存泄漏
如果封装成类(如 class Polynomial),重载 operator+ 时常见错误有:
- 返回局部数组指针(如
int tmp[100])→ 悬空指针 - 用
new int[...]分配但没配delete[]→ 内存泄漏(且不符合 RAII) - 结果 vector 没去除高位零 →
{0, 0, 5}被当成 $5x^2$,其实应是 $5$
正确做法:返回 std::vector<int></int> 值对象,末尾调用 resize() 去掉拖在后面的 0(但至少保留一个元素,防止空多项式)。
输入输出时幂次顺序容易搞反
用户输入常按「从高次到低次」给系数(如输入 3 0 5 表示 $3x^2 + 5$),但内部存储必须是「从低次到高次」。不转换就直接存,加法结果会全错。
处理建议:
- 读入后用
std::reverse()翻转一次 - 或读入时从后往前存:
coeffs[n-1-i] = input_i - 打印时再反向输出(或说明“索引 0 是常数项”)
这个方向性问题不报错,但结果完全不可预测,调试时最容易卡在这里。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











