输入格式:
输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数。数字间以空格分隔。
输出格式:
输出1行,以指数递降方式输出和多项式非零项的系数和指数(保证不超过整数的表示范围)。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。
输入样例:
4 3 4 -5 2 6 1 -2 0
3 5 20 -7 4 3 1
输出样例:
5 20 -4 4 -5 2 9 1 -2 0
// 作为初学者是很有可能出现 内存超过极限的错误,这时候要仔细检查代码欧~
//还有要注意审题,这点很重要
#include<stdio.h>
#include<malloc.h>
typedef struct node{
int data;
int index;
struct node *next;
}*List,Node;
List Read(){
int n;
List q,head=(List)malloc(sizeof(Node));
head->next=NULL;
q=head;
scanf("%d",&n);
while(n--){
List p=(List)malloc(sizeof(Node));
p->next=NULL;
scanf("%d %d",&p->data,&p->index);
q->next=p;
q=p;
}
return head;
}
List add(List L1,List L2){
List L3,p,q;
L3=(List)malloc(sizeof(Node));
L3->next=NULL;
q=L3;
L1=L1->next,L2=L2->next;
while(L1&&L2){
p=(List)malloc(sizeof(Node));
p->next=NULL;
if(L1->index>L2->index){
p->data=L1->data;
p->index=L1->index;
q->next=p;
q=p;
L1=L1->next;
}
else if(L1->index<L2->index){
p->data=L2->data;
p->index=L2->index;
q->next=p;
q=p;
L2=L2->next;
}
else{
p->data=L1->data+L2->data;
if(p->data==0){
L1=L1->next;
L2=L2->next;
continue;
}
p->index=L1->index;
q->next=p;
q=p;
L1=L1->next;
L2=L2->next;
}
}
while(L1){
q->next=L1;
break;
}
while(L2){
q->next=L2;
break;
}
return L3;
}
void print(List p){
p=p->next;
int flag=0;
while(p){
if(flag){
printf(" ");
}
else{
flag=1;
}
printf("%d %d",p->data,p->index);
p=p->next;
}
if(!flag){
printf("0 0");
}
}
int main(void){
List L1,L2,L3;
L1=Read();
L2=Read();
L3=add(L1,L2);
print(L3);
}