傳送門
設計函式分別求兩個一元多項式的乘積與和。
輸入格式:
輸入分2行,每行分別先給出多項式非零項的個數,再以指數遞降方式輸入乙個多項式非零項係數和指數(絕對值均為不超過1000的整數)。數字間以空格分隔。
輸出格式:
輸出分2行,分別以指數遞降方式輸出乘積多項式以及和多項式非零項的係數和指數。數字間以空格分隔,但結尾不能有多餘空格。零多項式應輸出0 0
。
輸入樣例:
434
-526
1-20
3520-
7431
輸出樣例:
1524-
2522
3021-10
20-218
356-33
5144-
153182
-615
20-44
-529
1-20
注意:零多項式:各項係數都為0的多項式(乙個特殊的常數多項式)
解法①陣列模擬鍊錶(偷雞版)(沒有考慮指數出現負數的情況)
資料很水,測試節點沒有出現 指數為負的情況,可以取巧:
用陣列的下標對映指數,用指數對映係數
#include
using namespace std;
int add[
3030
],mult[
3030];
int p1[
2010
],p2[
2010];
intmain()
cin>>m;
for(i=
0;i)for
(i=2010
;i>=
0;i--)if
(p1[i]
)for
(j=2010
;j>=
0;j--)if
(p2[j]
) mult[i+j]
+=p1[i]
*p2[j]
;for
(i=3030
;i>=
0;i--
)//遍歷陣列檢查兩個結果是否為零多項式if(
!flag1)
printf
("0 0");
else
for(i=
3030
;i>=
0;i--)if
(mult[i]
)printf
(!cnt++
?"%d %d"
:" %d %d"
,mult[i]
,i);
puts(""
);//換行
cnt=0;
//重置cnt,為了控制格式if(
!flag2)
printf
("0 0");
else
for(i=
3030
;i>=
0;i--)if
(add[i]
)printf
(!cnt++
?"%d %d"
:" %d %d"
,add[i]
,i);
}
②c++stl:map對映,用指數對映map
感悟:輸出乘積多項式結果的時候,指數的絕對值在2000~ -2000範圍內,而不是原來的1000 ~ -1000,如果還是當作範圍是 1000 ~ -1000範圍內輸出,第三個節點wa了
#include
#include
using namespace std;
map<
int,
int>seq1,seq2,add,mult;
//指數對映係數.key存指數;
intmain()
cin>>n;
for(
int i=
0;i)//計算乘積.
for(
int i=
1e3;i>=
-1e3
;i--)if
(seq1[i]
)for
(int j=
1e3;j>=
-1e3
;j--)if
(seq2[j]
) mult[i+j]
+=seq1[i]
*seq2[j]
;for
(int i=
2e3;i>=
-2e3
;i--
)//遍歷陣列檢查兩個結果是否為零多項式
//輸出乘積多項式 if(
!flag1)
printf
("0 0");
else
for(
int i=
2e3;i>=
-2e3
;i--)if
(mult[i]
)printf
(cnt++==0
?"%d %d"
:" %d %d"
,mult[i]
,i);
putchar(10
);//換行
cnt=0;
//還原cnt;
//輸出 和多項式if(
!flag2)
printf
("0 0");
else
for(
int i=
1e3;i>=
-1e3
;i--)if
(add[i]
)printf
(cnt++==0
?"%d %d"
:" %d %d"
,add[i]
,i);
}
有待:
陣列如何解決指數為負情況(加個常數對映)
正經鍊錶解法(懶,不喜歡鍊錶,太長了)
7 2 一元多項式的乘法與加法運算
written by robert wang in southwest university of science and technology.輸入分2行,每行分別先給出多項式非零項的個數,再以指數遞降方式輸入乙個多項式非零項係數和指數 絕對值均為不超過1000的整數 數字間以空格分隔。輸出分2行...
7 2 一元多項式的乘法與加法運算
設計函式分別求兩個一元多項式的乘積與和。輸入分2行,每行分別先給出多項式非零項的個數,再以指數遞降方式輸入乙個多項式非零項係數和指數 絕對值均為不超過1000的整數 數字間以空格分隔。輸出分2行,分別以指數遞降方式輸出乘積多項式以及和多項式非零項的係數和指數。數字間以空格分隔,但結尾不能有多餘空格。...
一元多項式的乘法與加法運算
設計函式分別求兩個一元多項式的乘積與和。輸入分2行,每行分別先給出多項式非零項的個數,再以指數遞降方式輸入乙個多項式非零項係數和指數 絕對值均為不超過1000的整數 數字間以空格分隔。輸出分2行,分別以指數遞降方式輸出乘積多項式以及和多項式非零項的係數和指數。數字間以空格分隔,但結尾不能有多餘空格。...