求取一元多項式乘積

2021-05-23 08:12:31 字數 1180 閱讀 2259

問題很常見:輸入為兩個一元多項式,要求輸出為兩個多項式的乘積。例如,輸入為2x2+1和5x-1,輸出為10x3-2x2+5x-1。

這是我求職期間某家公司的現場程式設計題。我歷來不喜歡為了考試而去拼命做題,使得自己高分低能。而歷來我自認為分析解決能力不錯,可遇到這道題真是愣住了。當時大概想了下,無非分兩步:先將多項式用資料結構表示出來,再去在對資料結構進行運算即可。想到matlab中多項式的向量表示法,第一步便完成了,第二步便只是對兩個向量元素進行數**算了。

對於一元多項式a0xt+a1xt-1+…+at-1x+at,可將其表示成[a0,a1,…,at-1,at],其中ai對應t階一元多項式中的aixt-i項。仍然以2x2+1和5x-1為輸入,則用向量可將2x2+1表示成[2,0,1],將5x-1表示成[5,-1],其中向量長度為多項式階次加1,而從第乙個元素到最後乙個元素對應最高端到最低階項的係數,當不存在時係數為0。至此,問題基本已經明了,無非對於兩個輸入的向量進行某些運算後輸出結果向量。

下面用c/c++語言實現一元多項式2x2+1和5x-1的乘法操作。

#include using namespace std;

#define m 3

#define n 2

#define s (m + n - 1)

int main(int argc, char* argv)

; int b[n] = ;

int c[s] = ;

// 輸出乘法因子

cout<<"輸入多項式為:"<

測試如下:

輸入多項式為:

2    0     1

5    -1

輸出多項式為:

10  -2    5    1

以上僅為一種最簡單的直觀解法,當多項式的階次很高但很多項的係數均為0時便是乙個稀疏矩陣,多項式向量法的表示造成大量空間浪費。對此,可選用《係數,階次》的數對來表示多項式中的某項,例如2x2表示為<2,2>,而各項之間用可採用鏈式結構,在此不再贅述。

事實上,對於一元多項式而言,其組成要素無非各項的係數和對應的階次問題,向量表示法直接儲存係數而將階次隱含在向量索引中,而鏈式表示的每個節點則直接儲存了這兩個因子。在具體應用過程中要根據一元多項式自身的情況選用合適的方法。

遇到陌生的問題並不可怕,可怕的是靜不下心來細細思考,而我初次面對這個題便遇到了如此的尷尬,而在走出來後靜坐幾分鐘內又解決了這個問題。很多時候,我們的敵人唯有自己!

一元多項式

一元多項式 功能 1 求解2個一元多項式的和 2 求解2個一元多項式的差 3 列印一元多項式 注 3 這個本來不算是乙個功能,但是發現列印一元多項式的時候問題很多。例如 1x應該列印成 x,x 0不應該應該列印出來 1.結點的定義 typedef struct polynomial polynomi...

一元多項式

include include using namespace std 定義結構體 typedef struct polynode polynode,polylist 建立關於多項式結構體的單鏈表,以係數0結束輸入 polylist polycreate 尾插法建立單鏈表 rear next nul...

一元多項式求導

時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 設計函式求一元多項式的導數。輸入格式 以指數遞降方式輸入多項式非零項係數和指數 絕對值均為不超過1000的整數 數字間以空格分隔。輸出格式 以與輸入相同的格式輸出導數多項式非零項的係數和指數。數...