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: }