指针和结构问题

pointers and struct issues

本文关键字:问题 结构 指针      更新时间:2023-10-16

我正在尝试添加两个多项式,

以下代码适用于多项式,如 1+2x+3x^2 和 1+x+x^2,

但当添加 1+2x+3x^2 和 1+1x+x^3 时则不适用。

请注意,系数存储在动态数组中,即使该项不存在,我们也会考虑它。 即 1+1x+x^3 输入为度数:3 系数 1 1 0 1。我还需要考虑何时添加两个相互抵消的多项式。即 +3x^2+(-3x^2)=0..关于我如何思考这两种情况的任何建议。

当两个多项式的次数不同时,这不起作用的原因是循环具有未定义的行为:它继续max-1,但max-1处的索引仅在两个多项式中的一个上有效。

循环中的代码在访问a->coeffs[i]之前需要检查索引i是否小于a->degree,并且在访问b->coeffs[i]之前索引i小于b->degree

for(int i=0; i<=max; i++)
    sum[i] = (i <= a->degree ? a->coeffs[i] : 0)
           + (i <= b->degree ? b->coeffs[i] : 0);

这样可以避免访问coeffs数组末尾之后的数据。