当前位置:首页 > C++ > 正文

C++语言多项式运算实现(从零开始掌握多项式加法与乘法)

在计算机科学和工程计算中,C++多项式运算是一个基础而重要的课题。无论是信号处理、数值分析还是密码学,都离不开对多项式的操作。本文将手把手教你如何用C++实现多项式的基本运算——加法与乘法,即使你是编程小白,也能轻松理解并上手实践。

C++语言多项式运算实现(从零开始掌握多项式加法与乘法) C++多项式运算 C++实现多项式 多项式加法乘法 C++数据结构教程 第1张

什么是多项式?

多项式是由变量(如 x)和系数通过加法、减法、乘法以及非负整数次幂组成的代数表达式。例如:

3x² + 5x - 2

在这个例子中,系数分别是 3、5 和 -2,对应的指数是 2、1 和 0。我们可以用一个数组或向量来存储这些系数,从而在程序中表示一个多项式。

设计思路:用 vector 存储系数

为了简化实现,我们使用 C++ 标准库中的 std::vector<double> 来存储多项式的系数。索引 i 对应 x 的 i 次幂的系数。例如,多项式 2x³ + 0x² + 4x + 1 可表示为:

std::vector<double> poly = {1, 4, 0, 2};// 索引0 → 常数项 1 (x⁰)// 索引1 → 4 (x¹)// 索引2 → 0 (x²)// 索引3 → 2 (x³)

实现多项式加法

两个多项式相加,只需将对应指数的系数相加即可。如果两个多项式长度不同,较短的那个可以视为高位补 0。

#include <iostream>#include <vector>using namespace std;vector<double> addPolynomials(const vector<double>& a, const vector<double>& b) {    size_t maxSize = max(a.size(), b.size());    vector<double> result(maxSize, 0.0);    for (size_t i = 0; i < maxSize; ++i) {        double coefA = (i < a.size()) ? a[i] : 0.0;        double coefB = (i < b.size()) ? b[i] : 0.0;        result[i] = coefA + coefB;    }    return result;}

实现多项式乘法

多项式乘法稍微复杂一些。若第一个多项式最高次为 m,第二个为 n,则结果最高次为 m+n。对于每一对 (i, j),我们将 a[i] * b[j] 累加到 result[i+j] 中。

vector<double> multiplyPolynomials(const vector<double>& a, const vector<double>& b) {    vector<double> result(a.size() + b.size() - 1, 0.0);    for (size_t i = 0; i < a.size(); ++i) {        for (size_t j = 0; j < b.size(); ++j) {            result[i + j] += a[i] * b[j];        }    }    return result;}

完整示例与测试

下面是一个完整的可运行程序,演示了如何使用上述函数进行多项式加法乘法

#include <iostream>#include <vector>#include <algorithm>using namespace std;// 此处插入 addPolynomials 和 multiplyPolynomials 函数void printPolynomial(const vector<double>& p) {    bool first = true;    for (int i = p.size() - 1; i >= 0; --i) {        if (p[i] == 0) continue;        if (!first && p[i] > 0) cout << " + ";        else if (!first) cout << " - ";        else if (p[i] < 0) cout << "-";        double absCoef = abs(p[i]);        if (i == 0 || absCoef != 1) cout << absCoef;        if (i >= 1) cout << "x";        if (i >= 2) cout << "^" << i;        first = false;    }    if (first) cout << "0";    cout << endl;}int main() {    vector<double> p1 = {-2, 5, 3};   // 3x² + 5x - 2    vector<double> p2 = {1, 2};       // 2x + 1    cout << "多项式1: ";    printPolynomial(p1);    cout << "多项式2: ";    printPolynomial(p2);    auto sum = addPolynomials(p1, p2);    cout << "\n加法结果: ";    printPolynomial(sum);    auto product = multiplyPolynomials(p1, p2);    cout << "乘法结果: ";    printPolynomial(product);    return 0;}

运行结果将输出:

多项式1: 3x^2 + 5x - 2多项式2: 2x + 1加法结果: 3x^2 + 7x - 1乘法结果: 6x^3 + 13x^2 + x - 2

总结与进阶建议

通过本教程,你已经掌握了如何用 C++ 实现基本的多项式运算。这种基于 vector 的方法简单直观,适合初学者理解。如果你希望深入学习,可以考虑以下方向:

  • 封装成 Polynomial 类,支持运算符重载(如 +、*)
  • 优化存储方式,跳过零系数(稀疏多项式)
  • 添加求导、积分、求值等高级功能
  • 结合 STL 算法提升性能

掌握这些基础后,你就能应对更复杂的数学建模任务。希望这篇C++数据结构教程能为你打开算法与数值计算的大门!