#include <bits/stdc++.h>
using namespace std;
struct node{
float coef;//系数
int exp;//指数
node * next;
};
node * creat(node * l)
{
float coef; int exp;
l = new node;
node * p,* q;
scanf("%f %d",&coef,&exp);
p=l;
while(coef!=0||exp!=0)
{
p->coef = coef;
p->exp = exp;
p->next = new node;
q = p;
p=p->next;
scanf("%f %d",&coef,&exp);
}
q->next=NULL;
return l;
}
void Print(node * l)
{
node * q = l;
while(q!=NULL)
{
if(q->coef>0&&l!=q&&l!=q)
{
cout<<"+";
}
cout<<q->coef<<"x^"<<q->exp;
q=q->next;
}
cout<<"\n";
}
void sortList(node *l)
{
node * p,*q;
for(p=l;p!=NULL;p=p->next)
{
q=l;
for(q=l;q->next!=NULL;q=q->next)
if(p->exp<q->exp)
{
int tmpe; float tmpf;
tmpe = p->exp;
p->exp = q ->exp;
q->exp =tmpe;
tmpf = p->coef;
p->coef = q ->coef;
q->coef =tmpf;
}
}
}
node * merge(node *a,node *b,node *c,float flag)
{
node *p,*q,*l,*lq;
p=a; q=b; //coef系数
c=new node;
l=c;
while(p!=NULL&&q!=NULL)
{
if(p->exp < q->exp)
{
l->coef = p->coef;
l->exp =p->exp;
l->next = new node;
lq = l; l = l->next;
l->coef = q->coef;
l->exp =q->exp;
l->next = new node;
lq = l; l = l->next;
}else if(p->exp > q->exp)
{
l->coef = q->coef;
l->exp =q->exp;
l->next = new node;
lq = l; l = l->next;
l->coef = p->coef;
l->exp =p->exp;
l->next = new node;
lq = l; l = l->next;
}else
{
l->coef = p->coef+(flag)*q->coef;
l->exp = p->exp;
lq=l; l->next = new node;
l=l->next;
}
if(p!=NULL)
p=p->next;
if(q!=NULL)
q=q->next;
}
l=new node;
while(p!=NULL)
{
l->coef = p->coef;
l->exp =p->exp;
l->next = new node;
lq = l; l = l->next;
p=p->next;
}
while(q!=NULL)
{
l->coef = q->coef;
l->exp =q->exp;
l->next = new node;
lq = l; l = l->next;
q=q->next;
}
lq->next = NULL;
return c;
}
int main()
{
node *a,*b,*c;
cout<<"please input in accordance with the format: (***) \n";
cout<<"the first formula\n";
a = creat(a);
cout<<"the second formula\n";
b = creat(b);
sortList(a);
sortList(b);
cout<<"the first formula: "; Print(a);
cout<<"the second formula: ";Print(b);
float plus=1,mins=-1;
c = merge(a,b,c,plus);
cout<<"plus: ";Print(c);
c = merge(a,b,c,mins);
cout<<"mins: ";Print(c);
}
/*
3 1 -2 2 6 3 0 0
1 1 1 2 1 3 0 0
*/