一元多项式加法运算的实现 swustoj

一元多项式加法运算的实现
 10000(ms)
 10000(kb)
 2093 / 5095
编程实现一元多项式的加法运算。(要求用链表实现)

输入

第一个一元多项式A; 第二个一元多项式B。 以(0,0)作为输入结束。

输出

多项式A和多项式B的和。

样例输入

5,3 7,8 9,15 0,0
2,0 6,3 -7,8 0,0

样例输出

2x^0+11x^3+9x^15

结构体数组:

#include
#include
using namespace std;
struct node
{
    int x,y;
}A[1005],B[1005];
bool cmp(node A,node B)//排序
{
	return A.y	int a,b;
	char c;
	int m=0,n=0;
	while(cin>>a>>c>>b)//输入第一组数
	{
		if(a==0&&b==0) break;
		else
		{
			A[m].x=a;
			A[m].y=b;
			m++;
		}
	}
	while(cin>>a>>c>>b)//输入第二组数
	{
		if(a==0&&b==0) break;
		else
		{
			B[n].x=a;
			B[n].y=b;
			n++;
		}
	}
	sort(A,A+m,cmp);//排序
	sort(B,B+n,cmp);
	a=0;b=0;
	int flag=0;//记标记表示是第一个输入
	while(a	{
		if(b>=n)//当a比b长时
		{
			if(flag) cout<<"+";
			cout<			a++;
		 }
		else if(a>=m)//当b比a长时
		{
			if(flag) cout<<"+";
			cout<			b++;
		}
		else
		{
			if(flag&&B[b].x+A[a].x!=0) cout<<"+";
			if(A[a].y==B[b].y)
			{
				if(B[b].x+A[a].x==0)
				{
					a++;b++;
				}
				else
				{
					cout<					a++;b++;
				}
						else
			{
				if(A[a].y				{
					cout<					a++;
				}
				else if(A[a].y>B[b].y)
				{
					cout<					b++;
				}
			}
		}
		flag=1;
	}
	return 0;
}
链表:(思路都差不多)
#include
#include
using namespace std;
typedef struct node
{
	int index;
	int coef;
	struct node *next;
}Sqlist;


void sort(Sqlist *l)
{
	Sqlist *r,*s,*t;
	s=l->next;
	while(s!=NULL)
	{
		r=s->next;
		while(r!=NULL)
		{
			if(s->index>r->index)
			{
				t->index=s->index;
				t->coef=s->coef;
				s->index=r->index;
				s->coef=r->coef;
				r->index=t->index;
				r->coef=t->coef;
			}
			 r=r->next; 
		}
		s=s->next;
	}
}
int main()
{
	int n,m;
	char c;
	Sqlist *l_1,*l_2,*r,*s;
	l_1=(Sqlist *)malloc(sizeof(Sqlist));
	l_1->next=NULL;
	r=l_1;
	
	while(cin>>n>>c>>m)
	{
		if(n==0&&m==0) break;
		s=(Sqlist *)malloc(sizeof(Sqlist));
		s->coef=n;
		s->index=m;
		r->next=s;
		r=s;
	}
	r->next=NULL;
	sort(l_1);
	l_2=(Sqlist *)malloc(sizeof(Sqlist));
	l_2->next=NULL;
	r=l_2;
	
	while(cin>>n>>c>>m)
	{
		if(n==0&&m==0) break;
		s=(Sqlist *)malloc(sizeof(Sqlist));
		s->coef=n;
		s->index=m;
		r->next=s;
		r=s;
	}
	r->next=NULL;
	sort(l_2);
	r=l_1->next;
	s=l_2->next;
	int flag=0;
	
	while(r!=NULL||s!=NULL)
	{
		if(r!=NULL&&s==NULL) 
		{
			if(r->coef>0&&flag==1) cout<<"+";
			cout<coef<<"x^"<index;
			r=r->next;
		}
		else if(s!=NULL&&r==NULL)
		{
			if(s->coef>0&&flag==1) cout<<"+";
			cout<coef<<"x^"<index;
			s=s->next;
		 }
		else if((r->indexindex)&&(r!=NULL&&s!=NULL))
		{
			if(r->coef>0&&flag==1) cout<<"+";
			cout<coef<<"x^"<index;
			r=r->next;
		}
		else if((r->index>s->index)&&(r!=NULL&&s!=NULL))
		{
			if(s->coef>0&&flag==1) cout<<"+";
			cout<coef<<"x^"<index;
			s=s->next;
		}
		else if((r->index==s->index)&&(r!=NULL&&s!=NULL))
		{
			if(s->coef+r->coef>0&&flag==1) cout<<"+";
			if(s->coef+r->coef!=0)
			{
				cout<coef+r->coef<<"x^"<index;
				s=s->next;
				r=r->next;
			}
			if(s->coef+r->coef==0)
			{
				s=s->next;
				r=r->next;
							flag=1;
	}
	return 0;
}

你可能感兴趣的:(swustoj)