编程实现一元多项式的加法运算。第一个一元多项式A; 第二个一元多项式B。 以(0,0)作为输入结束。多项式A和多项式B的和。数据结构
时间: 2023-05-29 18:06:08 浏览: 36
可以使用链表来表示一元多项式,每个节点存储一个系数和指数。具体实现如下:
```
struct Node {
int coef; // 系数
int exp; // 指数
Node* next; // 指向下一个节点的指针
};
// 一元多项式结构体
struct Polynomial {
Node* head; // 指向链表头节点的指针
// 构造函数
Polynomial() {
head = new Node{0, 0, nullptr}; // 创建一个头节点
}
// 插入一个节点
void insert(int coef, int exp) {
Node* p = head;
while (p->next != nullptr && p->next->exp > exp) {
p = p->next;
}
if (p->next != nullptr && p->next->exp == exp) {
p->next->coef += coef;
} else {
Node* q = new Node{coef, exp, p->next};
p->next = q;
}
}
// 打印多项式
void print() {
Node* p = head->next;
while (p != nullptr) {
if (p->coef != 0) {
cout << p->coef << "x^" << p->exp;
if (p->next != nullptr && p->next->coef > 0) {
cout << " + ";
} else if (p->next != nullptr && p->next->coef < 0) {
cout << " - ";
}
}
p = p->next;
}
cout << endl;
}
};
// 一元多项式加法
Polynomial add(const Polynomial& A, const Polynomial& B) {
Polynomial C;
Node* p = A.head->next;
Node* q = B.head->next;
while (p != nullptr && q != nullptr) {
if (p->exp > q->exp) {
C.insert(p->coef, p->exp);
p = p->next;
} else if (p->exp < q->exp) {
C.insert(q->coef, q->exp);
q = q->next;
} else {
int coef = p->coef + q->coef;
if (coef != 0) {
C.insert(coef, p->exp);
}
p = p->next;
q = q->next;
}
}
while (p != nullptr) {
C.insert(p->coef, p->exp);
p = p->next;
}
while (q != nullptr) {
C.insert(q->coef, q->exp);
q = q->next;
}
return C;
}
int main() {
Polynomial A, B;
int coef, exp;
cout << "请输入多项式A的系数和指数(以0 0结束):" << endl;
cin >> coef >> exp;
while (coef != 0 || exp != 0) {
A.insert(coef, exp);
cin >> coef >> exp;
}
cout << "请输入多项式B的系数和指数(以0 0结束):" << endl;
cin >> coef >> exp;
while (coef != 0 || exp != 0) {
B.insert(coef, exp);
cin >> coef >> exp;
}
cout << "多项式A为:";
A.print();
cout << "多项式B为:";
B.print();
cout << "多项式A和多项式B的和为:";
Polynomial C = add(A, B);
C.print();
return 0;
}
```