题目描述
编程实现一元多项式的加法运算。(要求用链表实现)
输入
第一行为一元多项式A, 以 0,0 作为输入结束;
第二行为一元多项式B, 以 0,0 作为输入结束。
输出
多项式A和多项式B的和。
样例输入
5,3 7,8 9,15 0,0
2,0 6,3 -7,8 0,0
样例输出//一般格式发不出去,不符合要求
2x0+11x3+9x^1
#include<stdio.h>
#include<malloc.h>
int flag;
typedef struct node
{
int a;
int b;
struct node *next;
}Linklist;
void creat(Linklist *&L)
{
int m,n;
Linklist *s,*r;
L=(Linklist *)malloc(sizeof(Linklist));
r=L;
while(1)
{
s=(Linklist *)malloc(sizeof(Linklist));
scanf("%d,%d",&m,&n);
if(m==0&&n==0)
break;
s->a=m;
s->b=n;
r->next=s;
r=s;
}
r->next=NULL;
}
void add(Linklist *&Qa,Linklist *&Qb)
{
Linklist *qa,*qb;
qa=Qa->next;
qb=Qb->next;
while(1)
{
int m,n,sum;
m=qa->b;
n=qb->b;
if(m<n)
{
printf("%dx^%d+",qa->a,qa->b);
qa=qa->next;
}
else if(m==n)
{
sum=qa->a+qb->a;
if(sum!=0)
{
qa->a=sum;
printf("%dx^%d+",qa->a,qa->b);
}
qa=qa->next;
qb=qb->next;
}
else
{
printf("%dx^%d+",qb->a,qb->b);
qb=qb->next;
}
if(qa==NULL)
{
flag=1;
break;
}
if(qb==NULL)
{
flag=2;
break;
}
}
if(flag==1)
{
while(qb->next!=NULL)
{
printf("%dx^%d+",qb->a,qb->b);
qb=qb->next;
}
printf("%dx^%d",qb->a,qb->b);
}
if(flag==2)
{
while(qa->next!=NULL)
{
printf("%dx^%d+",qa->a,qa->b);
qa=qa->next;
}
printf("%dx^%d",qa->a,qa->b);
}
}
int main()
{
Linklist *pa,*pb;
creat(pa);
creat(pb);
add(pa,pb);
return 0;
}
我感觉add函数里面m,n比大小是对应的关系(QA第一个数和QB第一个数比较,QA第二个数和QB第二个数比较),但是如果这样显然不符合题意,能讲一下add函数吗