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);
}

这段代码实现了一元多项式的加减乘除运算,并在主函数中进行了演示。您可以根据自己的需求,输入多项式的系数和指数,然后查看运算结果。

注意: 这只是一个简单的示例,可能并不涵盖所有的边界情况和错误处理。在实际应用中,您可能需要进行更多的验证和优化。

C++实现一元多项式的加减乘除运算(附源码)

原文地址: https://www.cveoy.top/t/topic/kbh 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录