C语言实现两个多项式相乘
时间: 2024-12-26 10:28:39 浏览: 6
在C语言中,我们可以使用数组和指针来实现两个多项式的相乘。首先,我们需要分别存储两个多项式的系数和对应的指数。例如,假设我们有两个多项式:
多项式A = a_n*x^n + a_{n-1}*x^{n-1} + ... + a_0
多项式B = b_m*x^m + b_{m-1}*x^{m-1} + ... + b_0
我们可以创建两个结构体,每个元素代表一个项:
```c
typedef struct {
int coef; // 系数
int exp; // 指数
} Term;
```
然后,创建两个`Term`类型的数组,用于存储两个多项式的系数和指数。接下来,我们可以编写一个递归函数来计算它们的乘积:
```c
void multiply(Term *result, const Term *poly1, const Term *poly2, int n, int m) {
if (n == 0 || m == 0) { // 如果其中一个多项式的指数为0,则结果直接添加对应系数
result->coef = poly1->coef * poly2->coef;
result->exp = 0;
result++;
} else {
for (int i = 0; i <= n; ++i) {
multiply(result, &poly1[i], poly2, n - i, m);
result->coef *= poly1[i].exp; // 为了保存指数累加的效果,需要在此处乘上当前项的指数
result->exp += i;
}
}
}
// 使用示例
Term *polyMultiplication(Term *res, const Term *poly1, int poly1_len, const Term *poly2, int poly2_len) {
int totalLength = poly1_len + poly2_len - 1;
res = malloc(sizeof(Term) * totalLength); // 分配足够的内存
multiply(res, poly1, poly2, poly1_len - 1, poly2_len - 1);
return res;
}
```
最后,别忘了处理内存分配和释放:
```c
void freePolynomial(Term *poly) {
for (int i = 0; i < sizeof(Term) * poly->exp; i++) {
free(poly);
poly++;
}
free(poly);
}
```
使用这个`multiply`函数,你可以计算两个多项式的乘积,并通过`freePolynomial`释放内存。
阅读全文