如何将两个多项式相乘
方法:
1.将乘法运算转换为加法运算
将P1当前项(ci,ei)乘P2多项式,再加到结果多项式中
t1 = P1; t2 = P2;
P = (Polynomial)malloc(sizeof(struct PolyNode));
P->link = NULL;
Rear = P;
while(t2){
Attach(t1->coef*t2->coef,t1->expon+t2->expon,&Rear);//指数相加,系数相乘
t2 = t2->link;
}
2.逐项插入
将P1当前项(c1i,e1i)乘P2当前项(c2i,e2i),并插入到结果多项式中,关键是要找到插入位置
初始结果多项式可由P1第一项乘P2获得(如上)
逐项插入做法:
Polynomial Mult(Polynomial P1,Polynomial P2){
Polynomial P, Rear,t1,t2,t;
int c,e;
if(!P1||!P2)return NULL;
t1 = P1; t2 = P2;
P = (Polynomial)malloc(sizeof(struct PolyNode));
P->link = NULL;
Rear = P;
while(t2){//先用P1的第一项乘以P2,得到P(初始结果多项式)
Attach(t1->coef*t2->coef,t1->expon+t2->expon,&Rear);
t2 = t2->link;
}
t1 = t1->link;
while(t1){
t2 = P2;Rear = P;
while(t2){
e = t1->expon+t2->expon;// 当前两项的指数和系数
c = t1->coef*t2->coef;
while(Rear->link&&Rear->link->expon>e)
Rear = Rear->link;
if(Rear->link&&Rear->link->expon==e){
if(Rear->link->coef+c){
Rear->link->coef+=c;
}else{
t = Rear->link;
Rear->link=t->link;
free(t);
}
}
else{
t=(Polynomial)malloc(sizeof(struct PolyNode));
t->coef = c; t->expon = e;
t->link = Rear->link;
Rear->link = t; Rear = Rear->link;
}
t2 = t2->link;
}
t1 = t1->link;
}
t2 = P; P = P->link; free(t2);
return P;
}