題意理解
已知兩個多項式:
(1)\(3x^4-5x^2+6x-2\)
(2)\(5x^{20}-7x^4+3x\)
多項式和:
\(5x^{20}-4x^4-5x^2+9x-2\)
多項式乘積:
\((a+b)(c+d)=ac+ad+bc+bd\)
略
輸入樣例:
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
求解思路
- 多項式表示 //首先是明確使用的數據結構
- 程序框架 //對程序整體有一個規划,下面的四步就是讀入、加、乘、輸出
- 讀多項式
- 加法實現
- 乘法實現
- 多項式輸出
理解起來也好理解呀。有明確的步驟,做起事來才不慌啊。
多項式的表示
僅表示非零項
數組:
變成簡單、調試容易;需要實現確定數組大小
鏈表:
動態性強;編程略復雜、調試比較困難
可以使用動態數組來實現 因為已經告訴了有多少項
數據結構設計
typedef struct PolyNode *Polynomial;
struct PolyNode{
int coef;
int expon;
Polynomial link;
};
程序框架搭建
int main(){
讀入多項式1
讀入多項式2
乘法運算並輸出
加法運算並輸出
return 0;
}
需要設計的函數:
讀入
相乘
相加
輸出
int main(){
Polynomial P1,P2,PP,PS;
P1=ReadPoly();
p2=ReadPoly();
PP=Mult(P1,P2);
PrintPoly(PP);
PS=Add(P1,P2);
printPoly(PS);
return 0;
}
如何讀入多項式
Polynomial ReadPoly(){
Polynomial P, Rear,t;
int c,e,N;
scanf("%d",&N);
P=(Polynomial)malloc(sizeof(struct PolyNode));//弄一個節點放在最前面,使得操作更具有一致性
P->link=NULL;
while(N--){
scanf("%d %d",&c,&d);
Attcah(c,e,&Rear);
}
t=P;p-P->link;free(t); //將多申請的節點去掉
return P;
}
Rear初值是多少
- Rear初值為NULL
- Rear指向一個空節點(推薦,一致性比較強)
void Attach(int c,int e, Polynomial *pRear){
Polynomial P;
P=(Polynomial)malloc(sizeof(struct PolyNode));
P->coef=c;
P->expon=e;
P->link=NULL;
(*pRear)->link=P;
*pRear=P;
}
Polynomial Add(Polynomial P1,Polynomial P2){
Polynomial t1=P1,t2=P2;
Polynomial Rear,P=(Polynomial)malloc(sizeof(struct PolyNode)),t;
P->Next=NULL;
Rear = P;
while(t1&&t2){
if(t1->expon==t2->expon){
Attach(t1->coef+t2->coef, t1->expon, &Rear);
t1=t1->Next;
t2=t2->Next;
}
else if(t1->expon>t2->expon){
Attach(t1->coef, t1->expon, &Rear);
t1=t1->Next;
}
else{
Attach(t2->coef, t2->expon, &Rear);
t2=t2->Next;
}
}
while(t1){
Attach(t1->coef, t1->expon, &Rear);
t1=t1->Next;
}
while (t2) {
Attach(t2->coef, t2->expon, &Rear);
t2=t2->Next;
}
t=P;P=P->Next;free(t);
return P;
};
void PrintPoly(Polynomial P){
Polynomial t=P;
int first =1;
while(t){
if(first==1){
printf("%d %d",t->coef,t->expon);
first=0;
t=t->Next;
}else{
printf(" %d %d",t->coef,t->expon);
t=t->Next;
}
}
};