一元多项式求和。
把任意给定的两个一元多项式P(x) ,Q(x) 输入计算机,计算它们的和并输出计算结果。
一元多项式可以用单链表表示,结点结构图示如下
#include<stdio.h>
#include<malloc.h>
typedef struct LNode
{
int coef;//系数
int exp;//指数
struct LNode *next;
}LinkNode;
void CreatList(LinkNode *&L)//创建多项式
{
int m, coef, exp;
L = (LinkNode*)malloc(sizeof(LinkNode));
LinkNode *s, *r;
r = L;
printf("请输入多项式的项数:\n");
scanf("%d", &m);
for (int i = 0; i < m; i++)
{
printf("输入第%d项的系数和指数", i + 1);
scanf("%d%d", &coef, &exp);
s = (LinkNode *)malloc(sizeof(LinkNode));
s->coef = coef;
s->exp = exp;
r->next = s;
r = s;
}
r->next = NULL;
}
int ListLength(LinkNode*&L)//链表长度
{
int n = 0;
LinkNode *p = L;
while (p->next != NULL)
{
n++;
p = p->next;
}
return n;
}
void DispList(LinkNode * L)//输出多项式
{
int j = 0;
LinkNode *p = L->next;
while (p != NULL)
{
printf("%dX^%d", p->coef, p->exp);
j++;
if (j < ListLength(L)) printf("+");
p = p->next;
}
printf("\n");
}
LinkNode*ListAdd(LinkNode *p, LinkNode *q)//多项式相加
{
LinkNode *L, *s, *r;
p = p->next;
q = q->next;
L = (LinkNode *)malloc(sizeof(LinkNode));
r = L;
while (p!= NULL && q!= NULL)
{
if (p->exp > q->exp)
{
s = (LinkNode *)malloc(sizeof(LinkNode));
s->coef = p->coef;
s->exp = p->exp;
r->next = s;
r = s;
p = p->next;
}
else if(p->exp == q->exp)
{
s = (LinkNode *)malloc(sizeof(LinkNode));
s->coef = p->coef + q->coef;
s->exp = p->exp;
if (s->coef == 0) free(s);
else
{
r->next = s;
r = s;
}
p = p->next;
q = q->next;
}
else
{
s = (LinkNode *)malloc(sizeof(LinkNode));
s->coef = q->coef;
s->exp = q->exp;
r->next = s;
r = s;
q = q->next;
}
}
if (p!= NULL)
r->next = p;
else if(q != NULL)
r->next = q;
else
r->next = NULL;
return L;
}
int main()
{
LinkNode *P, *Q;
printf("请输入第1个多项式:\n");
CreatList(P);
DispList(P);
printf("请输入第2个多项式;\n");
CreatList(Q);
DispList(Q);
LinkNode *L = ListAdd(P, Q);
printf("最后多项式为:");
DispList(L);
return 0;
}
结果样例