题目说明:
编写一元多项式加法运算程序。要求用线性链表存储一元多项式(参照课本)。该程序有以下几个功能:
- 多项式求和
输入:输入三个多项式,建立三个多项式链表Pa、Pb、Pc
(提示:调用CreatePolyn(polynomial &P,int m)。
输出:显示三个输入多项式Pa、Pb、Pc、和多项式Pa+Pb、多项式Pa+Pb+Pc
(提示:调用AddPolyn(polynomial &Pa, polynomial Pb), 调用PrintPolyn(polynomial P))。
- 退出
输入:
根据所选功能的不同,输入格式要求如下所示(第一个数据是功能选择编号,参见测试用例):
1
多项式A包含的项数,以指数递增的顺序输入多项式A各项的系数(整数)、指数(整数)
多项式B包含的项数,以指数递增的顺序输入多项式B各项的系数(整数)、指数(整数)
多项式C包含的项数,以指数递增的顺序输入多项式C各项的系数(整数)、指数(整数)
0 ---操作终止,退出。
输出:
对应一组输入,输出一次操作的结果(参见测试用例)。
1 多项式输出格式:以指数递增的顺序输出: <系数,指数>,<系数,指数>,<系数,指数>,参见测试用例。零多项式的输出格式为<0,0>
0 无输出
扫描二维码关注公众号,回复:
3749531 查看本文章
测试用例
in:
1
2
1 1 2 2
2
1 1 2 2
2
1 1 2 2
out:
<1,1>,<2,2>↵
<1,1>,<2,2>↵
<1,1>,<2,2>↵
<2,1>,<4,2>↵
< 3,1>,<6,2>↵
#include <cstdio>
#include <cstring>
using namespace std;
struct Node
{
int coef, expn;
Node *next;
};
struct Polyn
{
Node *head, *tail;
Polyn()
{
head = new Node;
head->coef = head->expn = -1;
head->next = NULL;
tail = head;
}
Node *insert(Node *p, Node *q)
{
q->next = p->next;
p->next = q;
return q;
}
void append(Node *p)
{
tail = insert(tail, p);
}
void append(int coef, int expn)
{
Node *p = new Node;
p->coef = coef;
p->expn = expn;
tail = insert(tail, p);
}
void print()
{
Node *p = head->next;
if (p == NULL)
{
printf("<0,0>\n");
return;
}
printf("<%d,%d>", p->coef, p->expn);
for (p = p->next; p != NULL; p = p->next)
printf(",<%d,%d>", p->coef, p->expn);
printf("\n");
}
};
Polyn operator+(Polyn &pa, Polyn &pb)
{
Polyn pc = Polyn();
Node *qa = pa.head->next, *qb = pb.head->next;
while (qa && qb)
{
if (qa->expn < qb->expn)
{
Node *p = qa;
qa = qa->next;
pc.append(p);
}
else if (qb->expn < qa->expn)
{
Node *p = qb;
qb = qb->next;
pc.append(p);
}
else
{
Node *p = new Node;
p->coef = qa->coef + qb->coef;
p->expn = qa->expn;
p->next = NULL;
if (p->coef != 0) pc.append(p);
qa = qa->next;
qb = qb->next;
}
}
if (qa)
pc.tail->next = qa;
if (qb)
pc.tail->next = qb;
return pc;
}
int main()
{
int q;
while(~scanf("%d", &q) && q)
{
Polyn pa = Polyn();
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
int coef, expn;
scanf("%d%d", &coef, &expn);
pa.append(coef, expn);
}
pa.print();
Polyn pb = Polyn();
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
int coef, expn;
scanf("%d%d", &coef, &expn);
pb.append(coef, expn);
}
pb.print();
Polyn pc = Polyn();
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
int coef, expn;
scanf("%d%d", &coef, &expn);
pc.append(coef, expn);
}
pc.print();
Polyn p = pa + pb;
p.print();
p = p + pc;
p.print();
}
return 0;
}