c++一元多项式相加减
时间: 2024-09-29 13:00:42 浏览: 38
在C++中,一元多项式的相加减通常涉及到操作数的系数和指数。你可以创建一个类来表示多项式,包含一组有序的项(如Pair<coeff, exp>),其中coeff代表系数,exp代表指数。以下是一个简单的例子:
```cpp
#include <iostream>
#include <vector>
#include <utility>
class Polynomial {
public:
using Term = std::pair<double, int>; // 表示系数和指数
private:
std::vector<Term> terms; // 存储多项式的项
public:
// 添加项
void addTerm(double coeff, int exp) {
terms.push_back(std::make_pair(coeff, exp));
}
// 删除指定指数的项
void removeTerm(int exp) {
terms.erase(remove_if(terms.begin(), terms.end(),
[exp](const auto& term) { return term.second == exp; }),
terms.end());
}
// 相加两个多项式
Polynomial operator+(const Polynomial& other) const {
Polynomial sum(*this);
for (const auto& o : other.terms) {
if (std::find(sum.terms.begin(), sum.terms.end(), o) != sum.terms.end()) {
sum.terms[sum.terms.find(o)] += o.first;
} else {
sum.addTerm(o.first, o.second);
}
}
return sum;
}
// 相减两个多项式
Polynomial operator-(const Polynomial& other) const {
Polynomial difference(*this);
for (const auto& o : other.terms) {
if (std::find(difference.terms.begin(), difference.terms.end(), o) != difference.terms.end()) {
difference.terms[difference.terms.find(o)] -= o.first;
} else {
difference.addTerm(-o.first, o.second);
}
}
return difference;
}
// 打印多项式
void print() const {
double prev_coeff = 0;
for (const auto& term : terms) {
if (term.first != prev_coeff) {
std::cout << term.first << "x^" << term.second << " + ";
} else {
std::cout << term.first << "^(" << term.second << " - 1) * x + ";
}
prev_coeff = term.first;
}
if (!terms.empty()) {
std::cout << "x"; // 移除最后多余的"+"字符
}
std::cout << "\n";
}
};
int main() {
Polynomial p1({1, 2, 3}); // 1 + 2x + 3x^2
Polynomial p2({4, 5}); // 4 + 5x
p1.print(); // 输出 p1
p2.print();
Polynomial sum = p1 + p2;
Polynomial diff = p1 - p2;
sum.print();
diff.print();
return 0;
}
```
在这个例子中,`operator+` 和 `operator-` 都实现了多项式之间的加法和减法。注意,这里假设指数是非负整数,并且我们简化了处理,没有考虑合并相同指数项的情况。实际应用中,可能会需要更复杂的算法来优化多项式相加减过程。
阅读全文