c++多项式相乘代码
时间: 2024-10-15 14:03:56 浏览: 67
在C++中,我们可以使用递归或迭代的方式来实现多项式的乘法,这里提供一种基于栈的迭代方法,称为“Karatsuba算法”的简化版本。这是一种用于高效计算大整数乘法的算法,但在处理多项式时也很适用。以下是基本的代码示例:
```cpp
#include <iostream>
#include <stack>
using namespace std;
// 定义多项式结构
struct Polynomial {
int coefficients[100]; // 假设最多有100项
int degree; // 最高次数
};
// 加法函数
Polynomial add(Polynomial p1, Polynomial p2) {
Polynomial result;
result.degree = max(p1.degree, p2.degree);
for (int i = -result.degree; i <= result.degree; ++i) {
result.coefficients[i] = (i >= 0 ? p1.coefficients[i] : 0) +
(i >= 0 ? p2.coefficients[i] : 0);
}
return result;
}
// 乘法函数,利用分治策略(Karatsuba算法)
Polynomial multiply(Polynomial p1, Polynomial p2) {
if (p1.degree == 0 || p2.degree == 0) { // 如果其中一个多项式为常数
return p1.degree == 0 ? p2 : p1;
}
int n = p1.degree + p2.degree;
Polynomial q1, q2, q3;
int m = n / 2;
q1 = multiply(Polynomial{p1.coefficients[0], m}, Polynomial{p2.coefficients[0], m});
q2 = multiply(Polynomial{p1, Polynomial{0, n - m}}, Polynomial{p2, Polynomial{0, n - m}});
q3 = multiply(Polynomial{p1, Polynomial{1, m}}, Polynomial{p2, Polynomial{1, m}});
q3.degree += m;
q2.degree -= m;
Polynomial result = add(add(q1, q2), ((q3.degrees == 2 * m) ? q3 : add(q3, Polynomial{0, m})));
result.degree = n - 1;
return result;
}
// 主函数演示使用
int main() {
Polynomial p1 = {3, 2, 1};
Polynomial p2 = {4, 5, 6};
Polynomial product = multiply(p1, p2);
cout << "Product polynomial coefficients: ";
for (int i = product.degree; i >= 0; --i) {
cout << product.coefficients[i] << "x^" << i << " + ";
}
cout << endl;
return 0;
}
```
这个代码实现了两个多项式 `p1` 和 `p2` 的乘法,并打印出结果的系数。注意这只是一个基础示例,实际应用中可能需要添加错误检查和输入验证。
阅读全文