2013-10-31 143 views
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 ..关于如何考虑这两种情况的任何建议。

+1

我不清楚你在问什么 - 也许你可以提供更多的上下文,或者一个例子显示你在找什么?请务必检查[问题清单](http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist)。谢谢! –

回答

1

当两个多项式的阶数不同时,这种做法不起作用的原因是该循环具有未定义的行为:它继续到max-1,但max-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阵列的末尾。

+0

哦,我想到合并排序时,我们在那里做类似的事情!谢谢 – user2809437

+0

@ user2809437我发布的修复程序应该做的诀窍 - 条件表达式将防止访问超过数组的末尾。只需用你的'sum [i] = a-> coeffs [i] + b-> coeffs [i];'来代替它,代码就可以工作。 – dasblinkenlight

+0

我做了<= a->度,我<= b->给了我正确的价值!再次感谢你 – user2809437