polynomial multiplication
use poly ADT:
1: #include <stdio.h> 2: #include <stdlib.h>3: #define MAX_DEGREE 9999
4: 5: struct polynomial
6: {7: int coeff_array[MAX_DEGREE];
8: int maxpower;
9: };10: typedef struct polynomial *ptr_to_poly;
11: typedef ptr_to_poly poly; 12: 13: 14: void zero_polynomial(poly p)
15: {16: int i;
17: for(i=MAX_DEGREE;i>=0;i--)
18: { 19: p->coeff_array[i]=0; 20: } 21: 22: p->maxpower=0; 23: } 24: 25: poly add_polynomial(const poly p1,const poly p2)
26: {27: poly sum=malloc(sizeof(struct polynomial));
28: zero_polynomial(sum);29: if(p1->maxpower>p2->maxpower)
30: { 31: sum->maxpower=p1->maxpower; 32: }33: else
34: { 35: sum->maxpower=p2->maxpower; 36: } 37: 38: int i;
39: for(i=sum->maxpower;i>=0;i--)
40: { 41: sum->coeff_array[i]=p1->coeff_array[i]+p2->coeff_array[i]; 42: }43: return sum;
44: } 45: 46: poly multiply(const poly p1,const poly p2)
47: {48: poly res=malloc(sizeof(struct polynomial));
49: zero_polynomial(res); 50: res->maxpower=p1->maxpower+p2->maxpower; 51: 52: int i,j;
53: for(i=0;i<=p1->maxpower;i++)
54: {55: for(j=0;j<=p2->maxpower;j++)
56: { 57: res->coeff_array[i+j]+=p1->coeff_array[i]*p2->coeff_array[j]; 58: } 59: }60: return res;
61: } 62: 63: void print_poly(poly p)
64: {65: int i;
66: printf("%d*X(%d)",p->coeff_array[p->maxpower],p->maxpower);
67: for(i=p->maxpower-1;i>=0;i--)
68: {69: if(p->coeff_array[i]!=0)
70: {71: printf("+%d*X(%d)",p->coeff_array[i],i);
72: } 73: }74: printf("\n");
75: } 76: 77: int main()
78: {79: poly p1=malloc(sizeof(struct polynomial));
80: poly p2=malloc(sizeof(struct polynomial));
81: zero_polynomial(p1); 82: zero_polynomial(p2); 83: p1->maxpower=9; 84: p1->coeff_array[9]=9; 85: p1->coeff_array[8]=8; 86: 87: p2->maxpower=9; 88: p2->coeff_array[9]=9; 89: p2->coeff_array[8]=8; 90: print_poly(p1); 91: print_poly(p2); 92: poly p3=add_polynomial(p1,p2); 93: print_poly(p3); 94: poly p4=multiply(p1,p2); 95: print_poly(p4);96: return 0;
97: }

浙公网安备 33010602011771号