Data_Structure/作業/unit2/polynominal.c

88 lines
2.0 KiB
C
Raw Normal View History

2025-01-20 21:30:53 +08:00
#include <stdio.h>
#include <stdlib.h>
#define DUMMY -1
void output_P(int P[], int size);
void Padd(int A[], int B[], int C[]);
char compare(int a, int b);
void output_P(int P[], int size) {
int i;
int first = 1;
for (i = 2; i < size; i += 2) {
if (P[i+1] != 0) {
if (!first) {
printf(" + ");
}
if (P[i] > 1) {
printf("%dx^%d", P[i+1], P[i]);
} else if (P[i] == 1) {
printf("%dx", P[i+1]);
} else {
printf("%d", P[i+1]);
}
first = 0;
}
}
if (first) { // <20>p<EFBFBD>G<EFBFBD>h<EFBFBD><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
printf("0");
}
printf("\n");
}
void Padd(int A[], int B[], int C[]) {
int i = 2, j = 2, k = 2;
int sizeA = A[1], sizeB = B[1];
while (i < sizeA * 2 + 2 || j < sizeB * 2 + 2) {
if (i >= sizeA * 2 + 2) {
C[k] = B[j];
C[k+1] = B[j+1];
j += 2;
} else if (j >= sizeB * 2 + 2) {
C[k] = A[i];
C[k+1] = A[i+1];
i += 2;
} else if (A[i] > B[j]) {
C[k] = A[i];
C[k+1] = A[i+1];
i += 2;
} else if (A[i] < B[j]) {
C[k] = B[j];
C[k+1] = B[j+1];
j += 2;
} else {
C[k] = A[i];
C[k+1] = A[i+1] + B[j+1];
if (C[k+1] == 0) {
k -= 2; // <20>p<EFBFBD>G<EFBFBD>Y<EFBFBD>Ƭ<EFBFBD>0<EFBFBD>A<EFBFBD><41><EFBFBD>K<EFBFBD>[<5B>o<EFBFBD>@<40><>
}
i += 2;
j += 2;
}
k += 2;
}
C[1] = (k - 2) / 2;
C[0] = DUMMY;
printf("A: ");
output_P(A, sizeA * 2 + 2);
printf("B: ");
output_P(B, sizeB * 2 + 2);
printf("C = A + B: ");
output_P(C, k);
}
char compare(int a, int b) {
if (a > b) return '>';
if (a < b) return '<';
return '=';
}
int main() {
int A[] = { DUMMY, 4, 4, 5, 3, 2, 2, 3, 0, 2 };
int B[] = { DUMMY, 3, 3, 6, 1, 5, 0, 1 };
int C[13] = { DUMMY };
Padd(A, B, C);
return 0;
}