一元多项式加减乘除c语言数组实现
时间: 2023-10-04 15:05:58 浏览: 127
C语言实现一元多项式的加减乘
以下是一元多项式加减乘除的C语言数组实现:
1. 定义一元多项式的结构体
```c
#define MAXN 1000 // 多项式最大项数
struct Polynomial{
int coef[MAXN]; // 系数数组
int exp[MAXN]; // 指数数组
int len; // 多项式项数
};
```
2. 初始化多项式
```c
void InitPoly(Polynomial &P){
memset(P.coef, 0, sizeof(P.coef)); // 初始化系数数组为 0
memset(P.exp, 0, sizeof(P.exp)); // 初始化指数数组为 0
P.len = 0; // 初始化项数为 0
}
```
3. 多项式加法
```c
void AddPoly(Polynomial A, Polynomial B, Polynomial &C){
InitPoly(C); // 初始化结果多项式为 0
int i = 0, j = 0;
while(i < A.len && j < B.len){
if(A.exp[i] > B.exp[j]){ // A 中指数较大
C.coef[C.len] = A.coef[i];
C.exp[C.len] = A.exp[i];
i++;
}
else if(A.exp[i] < B.exp[j]){ // B 中指数较大
C.coef[C.len] = B.coef[j];
C.exp[C.len] = B.exp[j];
j++;
}
else{ // 指数相等
C.coef[C.len] = A.coef[i] + B.coef[j];
C.exp[C.len] = A.exp[i];
i++;
j++;
}
C.len++;
}
while(i < A.len){ // 将 A 中剩余项加入 C 中
C.coef[C.len] = A.coef[i];
C.exp[C.len] = A.exp[i];
i++;
C.len++;
}
while(j < B.len){ // 将 B 中剩余项加入 C 中
C.coef[C.len] = B.coef[j];
C.exp[C.len] = B.exp[j];
j++;
C.len++;
}
}
```
4. 多项式减法
```c
void SubPoly(Polynomial A, Polynomial B, Polynomial &C){
InitPoly(C); // 初始化结果多项式为 0
int i = 0, j = 0;
while(i < A.len && j < B.len){
if(A.exp[i] > B.exp[j]){ // A 中指数较大
C.coef[C.len] = A.coef[i];
C.exp[C.len] = A.exp[i];
i++;
}
else if(A.exp[i] < B.exp[j]){ // B 中指数较大
C.coef[C.len] = -B.coef[j]; // 系数取相反数
C.exp[C.len] = B.exp[j];
j++;
}
else{ // 指数相等
C.coef[C.len] = A.coef[i] - B.coef[j];
C.exp[C.len] = A.exp[i];
i++;
j++;
}
C.len++;
}
while(i < A.len){ // 将 A 中剩余项加入 C 中
C.coef[C.len] = A.coef[i];
C.exp[C.len] = A.exp[i];
i++;
C.len++;
}
while(j < B.len){ // 将 B 中剩余项加入 C 中
C.coef[C.len] = -B.coef[j]; // 系数取相反数
C.exp[C.len] = B.exp[j];
j++;
C.len++;
}
}
```
5. 多项式乘法
```c
void MulPoly(Polynomial A, Polynomial B, Polynomial &C){
InitPoly(C); // 初始化结果多项式为 0
for(int i = 0; i < A.len; i++)
for(int j = 0; j < B.len; j++){
int k = A.exp[i] + B.exp[j];
C.coef[k] += A.coef[i] * B.coef[j]; // 累加系数乘积
}
for(int i = 0; i < MAXN; i++)
if(C.coef[i] != 0){ // 记录非零项
C.exp[C.len] = i;
C.len++;
}
}
```
6. 多项式除法
```c
void DivPoly(Polynomial A, Polynomial B, Polynomial &Q, Polynomial &R){
InitPoly(Q); // 初始化商多项式为 0
InitPoly(R); // 初始化余数多项式为 0
for(int i = A.len - 1; i >= 0; i--){ // 从高次项开始除
int k = A.exp[i] - B.exp[B.len - 1];
if(k < 0) break; // 除数次数超过被除数
int c = A.coef[i] / B.coef[B.len - 1]; // 计算系数
Q.coef[k] = c; // 存储商系数
Q.exp[Q.len] = k; // 存储商指数
Q.len++;
for(int j = 0; j < B.len; j++){ // 减去被除数乘以商
int t = k + B.exp[j];
A.coef[i - B.len + j + 1] -= c * B.coef[j];
}
}
for(int i = A.len - 1; i >= B.len - 1; i--){ // 存储余数
if(A.coef[i] != 0){
R.coef[R.len] = A.coef[i];
R.exp[R.len] = A.exp[i];
R.len++;
}
}
}
```
以上就是一元多项式加减乘除的C语言数组实现。需要注意的是,在进行除法运算时,被除数必须是单项式,即只有一项,而除数可以是多项式。
阅读全文