1

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

以下代码适用于 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..关于我如何考虑这两种情况的任何建议。

4

1 回答 1

1

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

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

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

这将使您避免访问超出coeffs数组末尾的数据。

于 2013-10-31T01:57:13.907 回答