用C++代码写两个一元稀疏多项式相加
时间: 2024-01-29 20:04:08 浏览: 84
以下是用 C 代码实现两个一元稀疏多项式相加的例子:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_TERMS 20
typedef struct {
int coef;
int expo;
} PolynomialTerm;
typedef struct {
PolynomialTerm terms[MAX_TERMS];
int size;
} Polynomial;
Polynomial addPolynomials(Polynomial p1, Polynomial p2) {
Polynomial result;
int i = 0, j = 0, k = 0;
while (i < p1.size && j < p2.size) {
if (p1.terms[i].expo > p2.terms[j].expo) {
result.terms[k++] = p1.terms[i++];
} else if (p1.terms[i].expo < p2.terms[j].expo) {
result.terms[k++] = p2.terms[j++];
} else {
result.terms[k].expo = p1.terms[i].expo;
result.terms[k++].coef = p1.terms[i++].coef + p2.terms[j++].coef;
}
}
while (i < p1.size)
result.terms[k++] = p1.terms[i++];
while (j < p2.size)
result.terms[k++] = p2.terms[j++];
result.size = k;
return result;
}
int main() {
Polynomial p1, p2, result;
p1.size = p2.size = result.size = 0;
// 输入第一个多项式
printf("Enter the number of terms in the first polynomial: ");
scanf("%d", &p1.size);
printf("Enter the coefficient and exponent of each term:\n");
for (int i = 0; i < p1.size; i++) {
scanf("%d %d", &p1.terms[i].coef, &p1.terms[i].expo);
}
// 输入第二个多项式
printf("\nEnter the number of terms in the second polynomial: ");
scanf("%d", &p2.size);
printf("Enter the coefficient and exponent of each term:\n");
for (int i = 0; i < p2.size; i++) {
scanf("%d %d", &p2.terms[i].coef, &p2.terms[i].expo);
}
// 计算结果多项式并输出
result = addPolynomials(p1, p2);
printf("\nResultant polynomial after addition:\n");
for (int i = 0; i < result.size; i++) {
printf("%dx^%d ", result.terms[i].coef, result.terms[i].expo);
if (i != result.size - 1) {
printf("+ ");
}
}
printf("\n");
return 0;
}
```
这个程序首先定义了两个结构体:`PolynomialTerm` 表示多项式中的一项,包括系数和指数;`Polynomial` 表示整个多项式,包括多个 `PolynomialTerm` 和 `size` 表示多项式中包含的项数。
然后定义了一个函数 `addPolynomials`,用于将两个多项式相加。这个函数首先定义了一个新的多项式 `result`,然后使用类似于归并排序的方式将两个多项式中的项按照指数排序,然后将相同指数的项的系数相加得到新的系数,最后将结果存入 `result` 中,并返回。
在 `main` 函数中,先输入两个多项式,然后调用 `addPolynomials` 函数计算结果,并输出。
阅读全文