#include <stdio.h>
#include <stdlib.h>
typedef struct ploy
{
float coef;
int exp;
struct ploy *next;
};
ploy *crePoly()
{
ploy *q, *p, *head;
int n;
printf("\n请输入多项式的项数:");
scanf("%d",&n);
head = (ploy *)malloc(sizeof(ploy));
if(!head)
{
printf("申请内存失败!");
exit(0);
}
head->next = NULL;
q = head;
for(int i = 1; i <= n; i ++)
{
p = (ploy *)malloc(sizeof(ploy));
printf("系数:");
scanf("%f",&p->coef);
printf("指数:");
scanf("%d",&p->exp);
q->next = p;
q = p;
q->next = NULL;
}
return(head);
}
int cmp(ploy *ployna, ploy *ploynb)
{
if(ployna->exp > ploynb->exp)
return 1;
else if(ployna->exp < ploynb->exp)
return -1;
else
return 0;
}
void print(ploy *p)
{
while(p->next != NULL)
{
p = p->next;
printf("%.0f*X^%d",p->coef,p->exp);
if(p->next != NULL)
printf("+");
}
}
void ploynadd(ploy *ployna, ploy *ploynb)
{
ploy *p,*q,*pa,*temp,*qb;
p = ployna->next;
q = ploynb->next;
pa=ployna;
qb = q;
int sum;
while(p != NULL && q != NULL)
{
switch(cmp(p, q))
{
case 1:
pa = pa->next;
p = p->next;
break;
case -1:
qb = qb->next;
pa->next = q;
q->next = p;
q = qb;
pa = pa->next;
break;
case 0:
sum = p->coef + q->coef;
if(sum != 0)
{
p->coef=sum;
pa = pa->next;
p = p->next;
temp = q;
q=q->next;
qb=q;
free(temp);
}
else
{
temp=p->next; free(p);p=temp;
temp=q->next; free(q);q=temp;
}
break;
}
}
if(p!=NULL)
pa->next=p;
else
pa->next=q;
}
int main()
{
printf("请按照指数从大到小的顺序输入\n");
ploy *ployna,*ploynb;
ployna = crePoly();
print(ployna);
ploynb = crePoly();
print(ploynb);
printf("\n");
ploynadd(ployna,ploynb);
print(ployna);
printf("\n");
}