#include <stdio.h>
#include <assert.h>
#define MAX 100
void LePolinomio( int *m, double p[] );
void ImprimePolinomio( int n, double r[] );
int AdicionaPol( 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 AdicionaPol( double p[], int m, double q[], int n, double r[] ) {
int i, g;
for( i = 0; i <= m || i <= n; i++ ) {
if ( i > m )
p[i] = 0;
if ( i > n )
q[i] = 0;
r[i] = p[i] + q[i];
}
g = i-1;
while (g > 0 && r[g] == 0)
g--;
return g;
}
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 = AdicionaPol( p, m, q, n, r );
ImprimePolinomio( gr, r );
return 0;
}