#include #include #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) { // 如果多項式為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; // 如果係數為0,不添加這一項 } 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; }