一元多项式的相加:选用适当的线性表结构存储一元多项式,并实现两个多项式相加,并将结果按照数学公式格式输出。多项式的数据应由键盘输入。用c++
时间: 2024-02-23 15:58:30 浏览: 139
好的,这里给出一种使用链表存储一元多项式的方法。我们可以定义一个结构体来存储一元多项式的每一项,包括系数和指数。然后使用链表将这些项连接起来,形成一个一元多项式。下面是代码实现:
```c++
#include <iostream>
using namespace std;
// 定义一元多项式的每一项
struct Term {
int coef; // 系数
int exp; // 指数
Term* next;
Term(int c = 0, int e = 0) : coef(c), exp(e), next(nullptr) {}
};
// 将一元多项式转换成字符串形式
string toString(Term* poly) {
if (poly == nullptr) {
return "0";
}
string res = "";
while (poly != nullptr) {
if (poly->coef > 0 && !res.empty()) {
res += "+";
}
if (poly->coef != 1 || poly->exp == 0) {
res += to_string(poly->coef);
}
if (poly->exp > 0) {
res += "x";
if (poly->exp > 1) {
res += "^" + to_string(poly->exp);
}
}
poly = poly->next;
}
return res;
}
// 将两个多项式相加
Term* addPoly(Term* poly1, Term* poly2) {
Term dummy(0, 0); // 定义虚拟头结点
Term* cur = &dummy;
while (poly1 != nullptr && poly2 != nullptr) {
if (poly1->exp < poly2->exp) {
cur->next = poly1;
poly1 = poly1->next;
} else if (poly1->exp > poly2->exp) {
cur->next = poly2;
poly2 = poly2->next;
} else {
int sum = poly1->coef + poly2->coef;
if (sum != 0) {
cur->next = new Term(sum, poly1->exp);
cur = cur->next;
}
poly1 = poly1->next;
poly2 = poly2->next;
}
}
// 处理剩余的项
if (poly1 != nullptr) {
cur->next = poly1;
} else {
cur->next = poly2;
}
return dummy.next;
}
int main() {
int n, coef, exp;
cin >> n;
// 创建第一个多项式
Term* poly1 = nullptr;
Term* cur1 = nullptr;
for (int i = 0; i < n; i++) {
cin >> coef >> exp;
if (coef != 0) {
if (cur1 == nullptr) {
poly1 = cur1 = new Term(coef, exp);
} else {
cur1->next = new Term(coef, exp);
cur1 = cur1->next;
}
}
}
// 创建第二个多项式
cin >> n;
Term* poly2 = nullptr;
Term* cur2 = nullptr;
for (int i = 0; i < n; i++) {
cin >> coef >> exp;
if (coef != 0) {
if (cur2 == nullptr) {
poly2 = cur2 = new Term(coef, exp);
} else {
cur2->next = new Term(coef, exp);
cur2 = cur2->next;
}
}
}
// 计算两个多项式的和
Term* res = addPoly(poly1, poly2);
// 输出结果
cout << toString(res) << endl;
// 释放内存
while (res != nullptr) {
Term* tmp = res;
res = res->next;
delete tmp;
}
return 0;
}
```
代码中,我们首先定义了一个结构体 `Term` 来存储一元多项式的每一项,包括系数和指数。然后使用链表将这些项连接起来,形成一个一元多项式。最后定义了一个函数 `toString` 来将一元多项式转换成字符串形式,方便输出结果。在计算两个多项式相加时,我们使用了归并排序的思想,将两个多项式按照指数从小到大排序,然后将它们的对应项相加,得到一个新的多项式。最后,我们释放了动态分配的内存。
阅读全文