今晚的月色温柔

导航

一元多项式相加

#include <iostream>
using namespace std;
struct PolyNode {
int exp;//指数
int coef;//系数
PolyNode *next;
};
typedef PolyNode *PLinkList;
PolyNode *getPrior(PLinkList L, int exp) {
PolyNode *pre;
pre = L;
while (pre->next && pre->next->exp <= exp) {
pre = pre->next;
}
return pre;
}
void createPLinkList(PLinkList &L, int n) {
L = new PolyNode;
L->next = NULL;
PolyNode *p, *q;
for (int i = 1; i <= n; i++) {
p = new PolyNode;
cin >> p->coef >> p->exp;
q = getPrior(L, p->exp);

p->next = q->next;
q->next = p;
}
}
void printPList(PLinkList L) {
PolyNode *p;
p = L->next;
if (p) {
cout << p->coef;
if (p->exp != 0)
cout << "X^" << p->exp;
}
p=p->next;
while (p) {
if(p->coef>0){
cout<<"+"<<p->coef;
}else{
cout<<p->coef;
}
if (p->exp != 0)
cout << "X^" << p->exp;
p = p->next;
}
cout << endl;
}
void polyAdd(PLinkList &La, PLinkList &Lb) {
{
PolyNode *p,*q,*tail,*temp;
int sum;
p = La->next;
q = Lb->next;
tail = La;
while(p && q) //p,q不为空
{
if(p->exp<q->exp)
{
tail->next = p;
tail = p;
p = p->next;
}

if(p->exp == q->exp)
{
sum = p->coef+q->coef;//相加
p->coef = sum;
tail->next = p;
tail = p;
p = p->next;
temp = q;
q = q->next;
}
else
{
tail->next = q;
tail = q;
q = q->next;
}

}
}

}
int main() {
PLinkList La, Lb;
createPLinkList(La, 3);
createPLinkList(Lb, 5);
polyAdd(La, Lb);
printPList(La);
return 0;
}

 

一元多项式相加

 

【问题描述】

    已知两个一元多项式,求其和。
【输入形式】

    两个按照指数项递增的有序单链表存储的一元多项式
【输出形式】

   用其中一个单链表存储的两个多项式的和。
【样例输入】

    2 3 -5 0 11 7
    3 0 1 2 -1 3 5 1 -6 7

【样例输出】

    -2+5X^1+1X^2+1X^3+5X^7

【样例说明】

    样例输入的第一行为第一个一元多项式:2 3为第一个系数项和指数项,-5 0为第二个系数项和指数项,11 7为第三个系数项和指数项

    样例输入的第二行为第二个一元多项式

posted on 2020-12-03 22:02  1022  阅读(215)  评论(0编辑  收藏  举报