思路:
首先要考慮儲存多項式,只需存它每一項的係數和指數,用佇列來儲存比較方便,所以需要呼叫之前的鍊錶隊
列,將每一項的指數和係數當做乙個資料存入佇列。然後簡單的加減乘除運算可以套用計算器(棧的應用),
只需將stack_entry型別換為多項式即可。
**要求:**運算的多項式必須按未知數指數從大到小排列。
**多項式加法:**對比兩個多項式的指數,指數相同的係數相加。
**多項式減法:**對比兩個多項式的指數,指數相同的係數相減。
**多項式乘法:**將乙個多項式拆開,讓其每一項都與另乙個多項式相乘,最後所有結果相加。
多項式除法:
需要遞迴,將被除數首項和除數首項取出相除,結果記為一部分商,餘數繼續取出首 項和除數首項相除,將結果與前面求出的部分商相加,以此迴圈,直到餘數小於除數。
說明:
**:term.h
struct term
;term::
term
(int exponent,
double scalar)
//建構函式
polynomial.cpp
#include
"term.h"
typedef term nodequeue_entry;
typedef nodequeue_entry queue_entry;
#include
"chainqueue.cpp"
class
polynomial
:private extended_queue
;void polynomial::
mult_term
(polynomial p, term t)
//求多項式與一項的乘積
}void polynomial::
print()
const
//列印
else
if(print_term.coefficient <
0) cout <<
" - "
;else cout <<
" + "
;//列印各項之間的符號
double r =
(print_term.coefficient >=0)
? print_term.coefficient :
-(print_term.coefficient);if
(r !=
1) cout << r;
//列印係數
if(print_term.degree >
1) cout <<
" x^"
<< print_term.degree;
if(print_term.degree ==
1) cout <<
" x"
;//列印指數部分
if(r ==
1&& print_term.degree ==
0) cout <<
" 1"
; print_node = print_node-
>next;
//遍歷}if
(first_term)
cout <<
"0";
cout << endl;
}void polynomial::
read()
//讀取
else
last_exponent = exponent;}}
while
(coefficient !=
0.0&& exponent !=0)
;}void polynomial::
equals_sum
(polynomial p, polynomial q)
//加法
//如果p的首項指數大於q的首項指數則讀出並刪除p的首項,將結果存入p_term中
else
if(q.
degree()
> p.
degree()
)//如果q的首項指數大於p的首項指數則讀出並刪除q的首項,將結果存入q_term中
else}}
}void polynomial::
equals_difference
(polynomial p, polynomial q)
//減法
//如果p的首項指數大於q的首項指數則讀出並刪除p的首項,將結果存入p_term中
else
if(q.
degree()
> p.
degree()
)//如果q的首項指數大於p的首項指數則讀出並刪除q的首項,將q指數的相反數存入q_term中
else}}
}void polynomial::
equals_product
(polynomial p, polynomial q)
//乘法
while
(new_sum.
serve_and_retrieve
(term)
== success)
(term)
;//遍歷完後,將結果存入鍊錶
}error_code polynomial::
equals_quotient
(polynomial p, polynomial q)
//除法
int polynomial::
degree()
const
//讀取首項的指數
main.cpp
#include
"polynomial.cpp"
typedef polynomial stack_entry;
#include
"stack.cpp"
void
introduction()
//說明程式作用
void
instructions()
//說明輸入規則
char
get_command()
//檢測輸入的字元是否有效
}return command;
}bool
do_command
(char command, stack &stored_polynomials)
break
;case
'+':
if(stored_polynomials.
empty()
) cout <<
"stack empty"
<< endl;
else
else
}break
;case
'q':
cout <<
"calculation finished."
<< endl;
return
false;}
return
true;}
intmain()
多項式簡單應用
求 displaystyle sum na i cdot b i 對於求 displaystyle sum na i cdot b i 把b陣列翻轉一下,等價於求 displaystyle sum na i cdot b 這不就是乙個卷積嘛,時間複雜度 theta nlog n 你可能會說時間複雜度...
多項式的表示和運算
多項式的關鍵資料 compare函式,比較p1和p2的指數大小,p1大返回1,p2大返回 1,相等返回0 attach函式 將計算結果複製到結果多項式 n為多項式的項數 完整 加法 乘法 include typedef struct node pnode struct node 將一項加入鍊錶,尾插...
多項式的冪運算
在寫 過程中發現字元陣列轉字串用.tostring 方法會亂碼,可以用string.valueof argsp 或者用array.tostring args 冪的運算時由於用的是string會出現空間浪費現象,可以用stringbuffer類替換,但是由於計算量不大,所以就沒有改了 package ...