我想補充兩個多項式,指針和結構問題
下面的代碼工作像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
,但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
陣列的末尾。
哦,我想到合併排序時,我們在那裏做類似的事情!謝謝 – user2809437
@ user2809437我發佈的修復程序應該做的訣竅 - 條件表達式將防止訪問超過數組的末尾。只需用你的'sum [i] = a-> coeffs [i] + b-> coeffs [i];'來代替它,代碼就可以工作。 – dasblinkenlight
我做了<= a->度,我<= b->給了我正確的價值!再次感謝你 – user2809437
我不清楚你在問什麼 - 也許你可以提供更多的上下文,或者一個例子顯示你在找什麼?請務必檢查[問題清單](http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist)。謝謝! –