#include <stdio.h>
#include <assert.h>
#define MAX 100
void LePolinomio( int *m, double p[] );
void ImprimePolinomio( int n, double r[] );
int MultiplicaPol( double p[], int m, double q[], int n, double r[] );
void LePolinomio( int *m, double p[] ) {
int i;
scanf ( "%d", m ); /* le grau do pol - scanf("%d",& *m);*/
for ( i = 0; i <= *m; i++ ) /* le cada coeficiente */
scanf ( "%lf", &p[i] );
return;
}
void ImprimePolinomio( int n, double r[] ) {
int i;
printf("%g", r[0]); /* imprime resultado final */
for ( i = 1; i <= n; i++ )
printf(" + %g x^%d", r[i], i);
printf("\n");
return;
}
int MultiplicaPol( double p[], int m, double q[], int n, double r[] ) {
int i, j;
for ( i = 0; i <= m + n; i++ )
r[i] = 0;
for ( i = 0; i <= m; i++ ) {
for ( j = 0; j <= n; j++ )
r[i+j] = r[i+j] + p[i] * q[j];
}
return m + n;
}
int main () {
int m, n, gr; /* graus */
double p[MAX+1], q[MAX+1], /* coefic. dos polinomios */
r[2*MAX+1]; /* polinomio produto */
LePolinomio ( &m, p ); /* le polinomio p(x) de grau m */
assert( m <= MAX );
LePolinomio ( &n, q ); /* le polinomio q(x) de grau n */
assert( n <= MAX );
gr = MultiplicaPol( p, m, q, n, r );
ImprimePolinomio( gr, r );
return 0;
}