題目
設計函式分別求兩個一元多項式的乘積與和。
輸入格式:
輸入分2行,每行分別先給出多項式非零項的個數,再以指數遞降方式輸入乙個多項式非零項係數和指數(絕對值均為不超過1000的整數)。數字間以空格分隔。
輸出格式:
輸出分2行,分別以指數遞降方式輸出乘積多項式以及和多項式非零項的係數和指數。數字間以空格分隔,但結尾不能有多餘空格。零多項式應輸出0 0。
輸入樣例:
4 3 4 -5 2 6 1 -2 0
3 5 20 -7 4 3 1
輸出樣例:
15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
5 20 -4 4 -5 2 9 1 -2 0
總的來說,這道題雖說是資料結構的題,不過我更感覺它像模擬題(坑點巨多)。這道題有兩種做法,一種是用陣列的方式進行對資料的儲存,另一種是鍊錶的方式來寫的(不過我還沒寫,打算先把剩下的知識點過一遍先,前面在搞鍊錶的時候拖延症都有了)。
總結:這道題應該用程式框架去寫的,顯得規範些,這個還是要改進一波。程式框架大致是:讀入多項式1 -> 讀入多項式2 -> 進行多項式的乘法運算並輸出 -> 進行多項式的加法運算並輸出。
多項式乘法的精髓:首先拿乙個一維陣列mul[n] = a,n表示多項式的指數,a表示多項式的係數,因為陣列不可能的開那麼大,這麼操作的原因是乘法後可能,按照題目範圍,n與a的絕對值都不可能超過1000,那也就是說,假設兩個多項式都為1000x ^ 1000時,可以發現相乘後指數為2000,而係數卻為1e6,開陣列就有些困難,這也就是為什麼陣列下標是指數的原因。接下來分三種情況,第一種是假設第乙個多項式為2x^2,另乙個多項式為1,相乘後多項式係數變為2 * 1 = 1,指數仍是第乙個多項式的指數。第二種是假如前者為0就顛倒過來。第三種是當兩者都不為0的時候,我們要把二者指數相加,係數相乘即可。輸出就要遍歷一下,看看是否為零多項式,也就是計算完之後多項式結果都為0 或者起初就有乙個多項式為0多項式的,那麼就要輸出(0 0),其次還有就是輸出格式的控制。
多項式加法的精髓:這個可以用乙個結構陣列來對係數和指數進行儲存,當第一項的多項式的指數與第二項多項式的指數相同時,那麼直接進行係數相加。而當第一項的指數大於第二項指數時,第一項直接放入add這個結構陣列中,並且第一項多項式往下遍歷,反之類似。
code:
#include#include#include#include#include#includeusing namespace std;
typedef long long ll;
const int maxn = 1e4 + 7;
const int maxm = 2e5 + 7;
const long long inf = 0x3f3f3f3f;
const long long mod = 1e9 + 7;
int n, m, cnt = 0, temp = 0;
struct node
p1[maxn], p2[maxn], add[maxn];
int mul[maxn]; //mul[n] = a, n是指數, a是係數
void printfmul()
}if(!flag) //為零表示式
printf("0 0");
printf("\n");
}void printfadd()
} if(!flag) //為零多項式
printf("0 0");
}int main()
else if(p2[i].expon == 0)
else
}} printfmul();
//多項式加法
for(int i = 0, j = 0; i < n || j < m; )
if(p1[i].expon > p2[j].expon)
if(p1[i].expon < p2[j].expon)
}printfadd();
return 0;
} /*
注意:
1.兩個多項式都為0項
2.乙個多項式的指數為0 另乙個指數不為0的情況,此時應係數相乘,指數取不為0的那一項
3. 存在相同指數的項要合併
hack:
2 -1 1 1 0
2 1 1 -1 0
-1 2 2 1 -1 0
0 02 1 2 1 0
2 1 2 -1 0
1 4 -1 0
2 20
1 999 1000
0 0999 1000
*/
線性結構 一元多項式的乘法與加法運算
設計函式分別求兩個一元多項式的乘積與和。輸入格式 輸入分2行,每行分別先給出多項式非零項的個數,再以指數遞降方式輸入乙個多項式非零項係數和指數 絕對值均為不超過1000的整數 數字間以空格分隔。輸出格式 輸出分2行,分別以指數遞降方式輸出乘積多項式以及和多項式非零項的係數和指數。數字間以空格分隔,但...
線性結構 一元多項式的乘法與加法運算
設計函式分別求兩個一元多項式的乘積與和。輸入分2行,每行分別先給出多項式非零項的個數,再以指數遞降方式輸入乙個多項式非零項係數和指數 絕對值均為不超過1000的整數 數字間以空格分隔。輸出分2行,分別以指數遞降方式輸出乘積多項式以及和多項式非零項的係數和指數。數字間以空格分隔,但結尾不能有多餘空格。...
線性結構2 一元多項式的乘法與加法運算
輸入分2行,每行分別先給出多項式非零項的個數,再以指數遞降方式輸入乙個多項式非零項係數和指數 絕對值均為不超過1000的整數 數字間以空格分隔。輸出分2行,分別以指數遞降方式輸出乘積多項式以及和多項式非零項的係數和指數。數字間以空格分隔,但結尾不能有多餘空格。零多項式應輸出0 0。4 3 4 5 2...