這仍然是一道關於a/b的題,只不過a和b都換成了多項式。你需要計算兩個多項式相除的商q和餘r,其中r的階數必須小於b的階數。
輸入格式:
輸入分兩行,每行給出乙個非零多項式,先給出a,再給出b。每行的格式如下:
n e[1] c[1] … e[n] c[n]其中n是該多項式非零項的個數,e[i]是第i個非零項的指數,c[i]是第i個非零項的係數。各項按照指數遞減的順序給出,保證所有指數是各不相同的非負整數,所有係數是非零整數,所有整數在整型範圍內。
輸出格式:
分兩行先後輸出商和餘,輸出格式與輸入格式相同,輸出的係數保留小數點後1位。同行數字間以1個空格分隔,行首尾不得有多餘空格。注意:零多項式是乙個特殊多項式,對應輸出為0 0 0.0。但非零多項式不能輸出零係數(包括捨入後為0.0)的項。在樣例中,餘多項式其實有常數項-1/27,但因其捨入後為0.0,故不輸出。
輸入樣例:
441
2-31
-10-
1323
1-20
1
輸出樣例:3
20.3
10.20-
1.011-
3.1
題目分析
本題主要有3個需要考慮的點:
多項式的除法運算
資料結構的選擇
保留1位小數後,有效數值的處理
一、首先解決多項式除法問題
多項式的除法簡單的來說,就是每次運算湊出被除數的最高次方的項,然後就能一次次的將被除數的最高次方給降下來,直到最高次方小於除數的次方。拿題目的樣例來說:
被除數:x4−
3x2−
x−1x^-3 x^-x-1
x4−3x2
−x−1
除數:3x2
−2x+
13x^-2x+1
3x2−2x
+1被除數最大次方的項是 x4x^
x4那就湊出來,將除數乘上乙個 13x
同理,再次湊出最大次方的項,只需要乘上乙個 29x
一樣的,最後我們乘上乙個 −
2627
-\frac
−2726
就是最後的答案了
題目要求進行保留1位小數所以結果就是:
商:0.3x2
+0.2x−
1.00.3x^+0.2x-1.0
0.3x2+
0.2x
−1.0
餘數:−
3.1x
−0.0
-3.1x-0.0
−3.1x−
0.0
二、其次解決資料結構選擇的問題
本題資料結構的選擇有很多種,我採用的是兩個陣列 e 和 c 分別儲存指數和係數但是其實你也可以使用 map 容器來儲存,key就是指數,value是係數;或者如果你不知道如何使用map,那你也可以使用結構體+陣列的方式,總的來說,資料結構有著很多的選擇,不同的資料結構處理起來也有不同的方式。三、最後解決保留小數1位小數的問題
題目要求保留1位小數,並且是經過捨入後的結果,如果你使用的是c語言的ac**:printf("%.1lf")
那麼你就不需要考慮捨入的問題,這種方式會自動四捨五入。如果你不是使用這種方式捨入,那麼你可以對輸出的結果加上乙個0.05,然後保留1位小數,這樣也能起到四捨五入的效果。
#include
#include
#include
using
namespace std;
int e[3]
[50000];
// 指數
double c[3]
[50000];
// 係數
int a[
50000];
// 輔助陣列
double b[
50000];
// 輔助陣列
void
run(
int id,
int n)}if
(alln ==0)
else
printf
("%d %.1lf\n"
, a[alln-1]
, b[alln-1]
);}}
intmain
(int argc,
char
*ar**)
cin>>n2;
for(
int i=
0;i)int id =0;
// 標記被除數最大次方
int sum =0;
// 記錄運算了幾次
while
(e[0
][id]
>= e[1]
[0])
i =0;
j =0;
while
(i < n1 && j < n2)
if(i >= n1)
break;if
(rt[0]
[j]== e[0]
[i])
else
if(rt[0]
[j]> e[0]
[i])
else
}while
(j < n2)
while
(i < n1)
int res =-1
;// 標記有效的最大次方項的下標(因為有係數為0的項)
L2 018 多項式A除以B (25 分)
l2 018 多項式a除以b 25 分 這仍然是一道關於a b的題,只不過a和b都換成了多項式。你需要計算兩個多項式相除的商q和餘r,其中r的階數必須小於b的階數。輸入分兩行,每行給出乙個非零多項式,先給出a,再給出b。每行的格式如下 n e 1 c 1 e n c n 其中n是該多項式非零項的個數...
L2 018 多項式A除以B 25 分
這仍然是一道關於a b的題,只不過a和b都換成了多項式。你需要計算兩個多項式相除的商q和餘r,其中r的階數必須小於b的階數。輸入分兩行,每行給出乙個非零多項式,先給出a,再給出b。每行的格式如下 n e 1 c 1 e n c n 其中n是該多項式非零項的個數,e i 是第i個非零項的指數,c i ...
L2 018 多項式A除以B (25 分)(細節)
l2 018 多項式a除以b 25 分 思路 測試點比較多,這種需要分步驟考慮,1 首先搞清楚什麼是多項式除法,就是b d c a,在a b中,d表示商,c表示餘數,所以從a的最高項開始比較,每次消掉a中的最高項,逐步降低多項式a的最高項數,每次降低都是利用a b x k c,每個 x k 和c都是...