设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:
输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0
。
输入样例:
4 3 4 -5 2 6 1 -2 0
3 5 20 -7 4 3 1
输出样例:
15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1 5 20 -4 4 -5 2 9 1 -2 0
#include<stdio.h> #include<malloc.h> #include<stdlib.h> #define LEN sizeof(LNode) typedef struct LNode{ int coef; int exp; struct LNode *next; }* Link; typedef struct{ Link head,tail; int len; }LinkList; Link InitList(LinkList &L){ int c,e; Link r; L.head=(LNode *)malloc(LEN); r=L.head; int t; scanf("%d",&t); while(t>0) {L.tail=(LNode *)malloc(LEN); scanf("%d",&c); scanf("%d",&e); L.tail->coef=c; L.tail->exp=e; r->next=L.tail; r=L.tail; t--; } r->next=NULL; return (L.head); } void free(Link t){ t->next=NULL; } void Add(Link pa,Link pb){ Link p,q,place,temp; int sum; p=pa->next; q=pb->next; place=pa; while(p!=NULL&&q!=NULL) { if(p->exp>q->exp) { place->next=p; place=place->next; p=p->next; } else if(p->exp==q->exp) { sum=p->coef+q->coef; if(sum!=0) { p->coef=sum; place->next=p;place=place->next;p=p->next; temp=q;q=q->next;free(temp); } else { temp=p->next;free(p);p=temp; temp=q->next;free(q);q=temp; }} else { place->next=q; place=place->next; q=q->next; } } if(p!=NULL) place->next=p; else place->next=q; } void print(Link p) { if(p->next==NULL) printf("0 0"); else { while(p->next!=NULL) { p=p->next; if(p->next!=NULL) printf("%d %d ",p->coef,p->exp); else printf("%d %d",p->coef,p->exp); } } } void Plus(Link pa,Link pb) { Link p,q,place,temp,t,head1; head1=(LNode *)malloc(LEN); head1->next=NULL; place=head1; int sum; p=pa->next; q=pb->next; while(p) { while(q) { temp=(LNode *)malloc(LEN); temp->coef=p->coef*q->coef; temp->exp=p->exp+q->exp; if(head1->next==NULL) { temp->next=NULL; place->next=temp; place=place->next; q=q->next; } else { if(temp->exp>head1->next->exp) { temp->next=head1->next; head1->next=temp; q=q->next; } else if(temp->exp<place->exp) { temp->next=NULL; place->next=temp; place=place->next; q=q->next; } else { for(t=head1;t->next;t=t->next) { if(temp->exp==t->next->exp) { sum=temp->coef+t->next->coef; if(sum) t->next->coef=sum; else { t->next=t->next->next; } place=head1; while(place->next) place=place->next; break; } else if(temp->exp>t->next->exp) { temp->next=t->next; t->next=temp; break; } } q=q->next; } } } q=pb->next; p=p->next; } p=head1->next; printf("%d %d",p->coef,p->exp); p=p->next; while(p) {printf(" %d %d",p->coef,p->exp); p=p->next; } } int main() { Link pa,pb; LinkList ppa,ppb; pa=InitList(ppa); pb=InitList(ppb); if(pa->next==NULL&&pb->next) { printf("0 0\n"); print(pb); } else if(pa->next&&pb->next==NULL) { printf("0 0\n"); print(pa); } else if(pa->next==NULL&&pb->next==NULL) {printf("0 0\n0 0"); } else { Plus(pa,pb);printf("\n"); Add(pa,pb);print(pa); } return 0; }