1変数多項式演算問題番号:463
質問の要件:
既知の1変数多項式: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であり、リンクリストのデータフィールドには2つの値があります
。coefexp
ここで、coefは係数、expは指数です。
入力の説明
各コマンドと関連データの入力形式は次のとおりです。
入力多項式A:A、次のn行は入力される多項式、データの各行には2つの値があり、
最初の値は係数を表し、2番目の値は指数を表します。 、最初の値が0の場合、多項式Aの入力は終了します。
入力多項式B:B。次のn行は入力される多項式です。データの各行には2つの値があります。
最初の値は係数を表し、2番目の値は係数を表します。指数を表します。最初の値が0の場合、多項式Bの入力が終了します。
多項式AとBの合計を求めます。C。
入力コマンドがEの場合、プログラムは終了します。
出力の説明
入力コマンドがCの場合、出力AとB 2つの多項式の合計である出力形式は入力形式と同じです。
すべての要素が1行を占めることに注意してください。
入力例
A3
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;
}
コンプリート。