题目要求: 已知一元多项式:A(x)=a0+a1x+a2x2+a3x3+….anxn, B(x)= b0+b1x+b2x2+b3x3+….bmxm设计算法实现C(x)=A(x)+B(x)。功能包括输入多项式A,输入多项式B,求A和B的和,显示求和后的结果等操作。本题中,链表的第一个元素位置为1,链表的数据域有两个值 : coef exp 其中coef为系数,exp为指数。 输入描述 各个命令以及相关数据的输入格式如下: 输入多项式A:A,接下来的n行是要输入的多项式,每一行数据有两个值, 第一个值代表系数,第二个值代表指数,当第一个值为0时,多项式A输入结束 输入多项式B:B,接下来的n行是要输入的多项式,每一行数据有两个值, 第一个值代表系数,第二个值代表指数,当第一个值为0时,多项式B输入结束 求多项式A和B的和:C 当输入的命令为E时,程序结束 输出描述 当输入的命令为C时,请输出A和B两个多项式的和,输出格式与输入格式相同 注意,所有的元素均占一行 输入样例 A 3 1 1 2 -1 10 4 12 -1 100 0 1 B -4 0 1 1 -3 2 1 6 -1 9 10 12 1 100 0 1 C E 输出样例 -4 0 4 1 -2 2 1 6 -1 9 -1 10 14 12
解题思路: 。。。
通关代码:
#include <iostream>
using namespace std;
struct Node {
int _coef;
int _exp;
Node* _next;
Node(int coef, int exp):_coef(coef), _exp(exp), _next(NULL) {}
};
class Polynomial {
public:
Polynomial();
~Polynomial();
public:
void Insert(int coef, int exp);
void Print();
Node* getHead();
private:
Node* head_;
Node* rear_;
};
Polynomial::Polynomial() {
head_ = new Node(0, 0);
rear_ = head_;
}
Polynomial::~Polynomial() {
Node* afterHead = NULL;
for (Node* p = head_; p != NULL; p = afterHead) {
afterHead = p->_next;
delete p;
}
}
void Polynomial::Insert(int coef, int exp) {
Node* node = new Node(coef, exp);
rear_->_next = node;
rear_ = node;
}
void Polynomial::Print() {
for (Node* p = head_->_next; p != NULL; p = p->_next) {
cout << p->_coef << ' ' << p->_exp << endl;
}
}
Node* Polynomial::getHead() {
return head_;
}
void getResToA(Polynomial &A, Polynomial &B) {
Node* previousA = A.getHead();
Node* previousB = B.getHead();
Node* pA = previousA->_next;
Node* pB = previousB->_next;
Node* temp = NULL;
while (pA != NULL && pB != NULL) {
if (pA->_exp < pB->_exp) {
previousA = pA;
pA = pA->_next;
} else if (pA->_exp > pB->_exp) {
temp = pB->_next;
previousA->_next = pB;
pB->_next = pA;
previousA = pB;
pB = temp;
previousB->_next = pB;
} else {
pA->_coef = pA->_coef + pB->_coef;
if (pA->_coef == 0) {
previousA->_next = pA->_next;
delete pA;
pA = previousA->_next;
} else {
previousA = pA;
pA = pA->_next;
}
previousB->_next = pB->_next;
delete pB;
pB = previousB->_next;
}
}
if (pB != NULL) previousA->_next = pB;
}
int main() {
Polynomial A, B;
char key;
int coef, exp;
while (cin >> key) {
if (key == 'E') break;
switch (key) {
case 'A':
while (true) {
cin >> coef >> exp;
if (coef == 0) break;
A.Insert(coef, exp);
}
break;
case 'B':
while (true) {
cin >> coef >> exp;
if (coef == 0) break;
B.Insert(coef, exp);
}
break;
case 'C':
getResToA(A, B);
A.Print();
break;
}
}
return 0;
}
毕。