多项式加法乘法
多项式加法乘法
0x00 加法
node* plus(node* a,node* b){
node* p1;
node*p2;
node*p3;
node* ret=(node*)malloc(sizeof(node));
p3=ret;
ret->a=-1;
ret->x=-1;
p1=a->next;
p2=b->next;
while(p1||p2){
p3->next=(node*)malloc(sizeof(node));
if(p1&&p2&&p1->x>p2->x){
p3->next->a=p1->a;
p3->next->x=p1->x;
p1=p1->next;
p3=p3->next;
}else if(p1&&p2&&p1->x<p2->x){
p3->next->a=p2->a;
p3->next->x=p2->x;
p2=p2->next;
p3=p3->next;
}else if(p1&&p2&&p1->x==p2->x){
if(p1->a+p2->a==0){
p1=p1->next;
p2=p2->next;
}else{
p3->next->a=p1->a+p2->a;
p3->next->x=p1->x;
p1=p1->next;
p2=p2->next;
p3=p3->next;
}
}else if(!p1&&p2){
p3->next->a=p2->a;
p3->next->x=p2->x;
p2=p2->next;
p3=p3->next;
}else if(p1&&!p2){
p3->next->a=p1->a;
p3->next->x=p1->x;
p1=p1->next;
p3=p3->next;
}
}
p3->next=NULL;
return ret;
}
0x01 乘法
node* multiply(node*a,node*b){
node*p1=a;
node*p2=b;
node*count=(node*)malloc(sizeof(node));
count->a=-1;
count->x=-1;
count->next=NULL;
while(p2->next){
p1=a;
node * c=(node*)malloc(sizeof(node));
c->a=-1;
c->x=-1;
node*p3=c;
while(p1->next){
node *temp=(node*)malloc(sizeof(node));
temp->a=p1->next->a*p2->next->a;
temp->x=p1->next->x+p2->next->x;
p3->next=temp;
p3=p3->next;
p1=p1->next;
}
p3->next=NULL;
p2=p2->next;
count=plus(count,c);
}
return count;
}
以上代码均测试通过