我正在尝试添加两个多项式,
以下代码适用于 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..关于我如何考虑这两种情况的任何建议。
我正在尝试添加两个多项式,
以下代码适用于 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
,但索引 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
数组末尾的数据。