多项式加法乘法

多项式加法乘法

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;
}

以上代码均测试通过