2013-10-31 141 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