注意:要求输入的一元多项式必须已经合并同类项。
#include<stdio.h>
#include<stdlib.h>
typedef struct str {
int coe,ind;
struct str *next;
} list;
list *creatlist(int length);
list *sumlist(list *a,list *b);
void displaylist(list *a);
int main() {
list *a=creatlist(4);
list *b=creatlist(3);
list *c=sumlist(a,b);
displaylist(c);
return 0;
}
list *creatlist(int length) {
int a[length];
int b[length];
printf("请输入表达式:\n");
for(int i=0; i<length; i++) {
scanf("%d %d",&a[i],&b[i]);
}
int k=0,t=0;
for(int i=0; i<length; i++) {
k=i;
for(int j=i; j<length; j++) {
if(b[j]<b[k]) {
k=j;
}
}
t=b[i];
b[i]=b[k];
b[k]=t;
t=a[i];
a[i]=a[k];
a[k]=t;
}
list *head,*p,*q;
p=(list*)malloc(sizeof(list));
head=p;
for(int i=0; i<length; i++) {
q=(list*)malloc(sizeof(list));
q->coe=a[i];
q->ind=b[i];
q->next=NULL;
p->next=q;
p=q;
}
return head;
}
list *sumlist(list *a,list *b) {
list *head=(list*)malloc(sizeof(list));
list *p=head;
a=a->next;
b=b->next;
for(; a!=NULL&&b!=NULL;) {
if(a->ind<b->ind) {
head->next=a;
head=a;
a=a->next;
continue;
}
if(a->ind==b->ind) {
int sum=a->coe+b->coe;
if(sum!=0) {
a->coe=sum;
head->next=a;
head=a;
a=a->next;
b=b->next;
continue;
} else if(sum==0) {
a=a->next;
b=b->next;
continue;
}
}
if(a->ind>b->ind) {
head->next=b;
head=b;
b=b->next;
continue;
}
}
if(a==NULL) {
head->next=b;
}
if(b==NULL) {
head->next=a;
}
return p;
}
void displaylist(list *a) {
a=a->next;
if(a->ind!=0)
printf("%dx*%d",a->coe,a->ind);
else {
printf("%d",a->coe);
}
a=a->next;
while(a!=NULL) {
if(a->coe>0&&a->ind!=0) {
printf("+%dx*%d",a->coe,a->ind);
a=a->next;
}
if(a->coe>0&&a->ind==0) {
printf("+%d",a->coe);
a=a->next;
}
if(a->coe<0&&a->ind!=0) {
printf("-%dx*%d",a->coe,a->ind);
a=a->next;
}
if(a->coe>0&&a->ind==0) {
printf("-%d",a->coe);
a=a->next;
}
}
}