C++实现一元多项式的加减乘除运算(附源码)
C++实现一元多项式的加减乘除运算
本文提供了一份完整的C++代码,用于实现一元多项式的加减乘除运算。代码结构清晰,注释详细,适合学习和参考。
#include <iostream>
#include <vector>
using namespace std;
// 结构体定义多项式的每一项
struct Term {
int coefficient; // 系数
int exponent; // 指数
};
// 函数声明
void readPolynomial(vector<Term>& poly);
void displayPolynomial(const vector<Term>& poly);
vector<Term> addPolynomials(const vector<Term>& poly1, const vector<Term>& poly2);
vector<Term> subtractPolynomials(const vector<Term>& poly1, const vector<Term>& poly2);
vector<Term> multiplyPolynomials(const vector<Term>& poly1, const vector<Term>& poly2);
pair<vector<Term>, vector<Term>> dividePolynomials(const vector<Term>& poly1, const vector<Term>& poly2);
int main() {
vector<Term> poly1, poly2, result, quotient, remainder;
cout << '--- Polynomial 1 ---' << endl;
readPolynomial(poly1);
cout << '--- Polynomial 1 Entered ---' << endl;
displayPolynomial(poly1);
cout << '--- Polynomial 2 ---' << endl;
readPolynomial(poly2);
cout << '--- Polynomial 2 Entered ---' << endl;
displayPolynomial(poly2);
// 加法
result = addPolynomials(poly1, poly2);
cout << '--- Polynomial Addition ---' << endl;
displayPolynomial(result);
// 减法
result = subtractPolynomials(poly1, poly2);
cout << '--- Polynomial Subtraction ---' << endl;
displayPolynomial(result);
// 乘法
result = multiplyPolynomials(poly1, poly2);
cout << '--- Polynomial Multiplication ---' << endl;
displayPolynomial(result);
// 除法
pair<vector<Term>, vector<Term>> divisionResult = dividePolynomials(poly1, poly2);
quotient = divisionResult.first;
remainder = divisionResult.second;
cout << '--- Polynomial Division ---' << endl;
cout << 'Quotient: ';
displayPolynomial(quotient);
cout << 'Remainder: ';
displayPolynomial(remainder);
return 0;
}
// 读取多项式的每一项
void readPolynomial(vector<Term>& poly) {
int numTerms;
cout << 'Enter the number of terms: ';
cin >> numTerms;
for (int i = 0; i < numTerms; i++) {
Term term;
cout << 'Enter coefficient and exponent for term ' << i + 1 << ': ';
cin >> term.coefficient >> term.exponent;
poly.push_back(term);
}
}
// 显示多项式
void displayPolynomial(const vector<Term>& poly) {
for (int i = 0; i < poly.size(); i++) {
cout << poly[i].coefficient << 'x^' << poly[i].exponent;
if (i != poly.size() - 1) {
if (poly[i + 1].coefficient >= 0)
cout << ' + ';
else
cout << ' - ';
}
}
cout << endl;
}
// 多项式加法
vector<Term> addPolynomials(const vector<Term>& poly1, const vector<Term>& poly2) {
vector<Term> result;
int i = 0, j = 0;
while (i < poly1.size() && j < poly2.size()) {
if (poly1[i].exponent > poly2[j].exponent) {
result.push_back(poly1[i++]);
} else if (poly1[i].exponent < poly2[j].exponent) {
result.push_back(poly2[j++]);
} else {
Term term;
term.coefficient = poly1[i].coefficient + poly2[j].coefficient;
term.exponent = poly1[i].exponent;
result.push_back(term);
i++;
j++;
}
}
while (i < poly1.size()) {
result.push_back(poly1[i++]);
}
while (j < poly2.size()) {
result.push_back(poly2[j++]);
}
return result;
}
// 多项式减法
vector<Term> subtractPolynomials(const vector<Term>& poly1, const vector<Term>& poly2) {
vector<Term> result;
int i = 0, j = 0;
while (i < poly1.size() && j < poly2.size()) {
if (poly1[i].exponent > poly2[j].exponent) {
result.push_back(poly1[i++]);
} else if (poly1[i].exponent < poly2[j].exponent) {
Term term;
term.coefficient = -poly2[j].coefficient;
term.exponent = poly2[j].exponent;
result.push_back(term);
j++;
} else {
Term term;
term.coefficient = poly1[i].coefficient - poly2[j].coefficient;
term.exponent = poly1[i].exponent;
result.push_back(term);
i++;
j++;
}
}
while (i < poly1.size()) {
result.push_back(poly1[i++]);
}
while (j < poly2.size()) {
Term term;
term.coefficient = -poly2[j].coefficient;
term.exponent = poly2[j].exponent;
result.push_back(term);
j++;
}
return result;
}
// 多项式乘法
vector<Term> multiplyPolynomials(const vector<Term>& poly1, const vector<Term>& poly2) {
vector<Term> result;
for (int i = 0; i < poly1.size(); i++) {
for (int j = 0; j < poly2.size(); j++) {
Term term;
term.coefficient = poly1[i].coefficient * poly2[j].coefficient;
term.exponent = poly1[i].exponent + poly2[j].exponent;
result.push_back(term);
}
}
return result;
}
// 多项式除法
pair<vector<Term>, vector<Term>> dividePolynomials(const vector<Term>& poly1, const vector<Term>& poly2) {
vector<Term> quotient, remainder = poly1;
while (remainder.size() >= poly2.size()) {
Term term;
term.coefficient = remainder[0].coefficient / poly2[0].coefficient;
term.exponent = remainder[0].exponent - poly2[0].exponent;
quotient.push_back(term);
for (int j = 0; j < poly2.size(); j++) {
remainder[j].coefficient -= (term.coefficient * poly2[j].coefficient);
}
while (remainder.size() > 0 && remainder[0].coefficient == 0) {
remainder.erase(remainder.begin());
}
}
return make_pair(quotient, remainder);
}
这段代码实现了一元多项式的加减乘除运算,并在主函数中进行了演示。您可以根据自己的需求,输入多项式的系数和指数,然后查看运算结果。
注意: 这只是一个简单的示例,可能并不涵盖所有的边界情况和错误处理。在实际应用中,您可能需要进行更多的验证和优化。
原文地址: https://www.cveoy.top/t/topic/kbh 著作权归作者所有。请勿转载和采集!