题目
求两个多项式的积
输入格式为两行,每行第一个数表示这个多项式非零项的个数k, 接下来的每两个数据表示次数和该次数的系数,共k组。
I/O
Sample Input
2 1 2.4 0 3.2
2 2 1.5 1 0.5
Sample Output
3 3 3.6 2 6.0 1 1.6
算法
由于k<=10,直接暴力求多项式系数,不必用什么矩阵了。但貌似C++里面有计算的STL,没去研究过。
数组开大一点,至少2001。
代码
#include <cstdio>
#include <cstring>
#include <cmath>
double expo[3][10100];
int maxexp[3];
void product()
{ for(int i = 0; i<=maxexp[0]; i++)
{ for(int j = 0; j<=maxexp[1]; j++)
{ expo[2][i+j]+=expo[0][i]*expo[1][j];
if(i+j>maxexp[2]) maxexp[2] = i+j;
}
}
int cnt = 0;
for(int i = 0; i<=maxexp[2]; i++)
{ if(fabs(expo[2][i])>=0.00001)
cnt++;
}
printf("%d", cnt);
for(int i = maxexp[2]; i>=0; i--)
{ if(fabs(expo[2][i])>=0.00001)
printf(" %d %.1lf", i, expo[2][i]);
}
return;
}
int main()
{ memset(expo, 0, sizeof(expo));
memset(maxexp, 0, sizeof(maxexp));
for(int i = 0; i<2; i++)
{ int k;
scanf("%d", &k);
while(k--)
{ int e;
double c;
scanf("%d %lf",&e, &c);
expo[i][e]+=c;
if(e>maxexp[i]) maxexp[i] = e;
}
}
product();
return 0;
}