分析:
本题给出两个多项式的系数,求出这两个多项式的乘积。
先获得第一个多项式的系数,然后在输出第二个系数时循环与第一个多项式的系数相乘,并将结果加到对应的系数上,最后得到要输出的所有非零系数的项。
存放答案的数组至少要开到 2001 2001 2001,因为两个最高幂次为 1000 1000 1000 的多项式相乘,最高幂次可以达到 2000 2000 2000。
代码(C++)
#include <iostream>
using namespace std;
const int N = 2010;
struct Poly
{
int exp;
double cof;
} poly[N / 2]; // 第一个多项式
double ans[N]; // 存放结果
int main()
{
int n, m, cnt = 0;
scanf("%d", &n);
for (int i = 0; i < n; i ++)
{
scanf("%d %lf", &poly[i].exp, &poly[i].cof);
}
scanf("%d", &m);
for (int i = 0; i < m; i ++)
{
int exp;
double cof;
scanf("%d %lf", &exp, &cof);
for (int j = 0; j < n; j++)
{
ans[exp + poly[j].exp] += (cof * poly[j].cof);
}
}
for (int i = 0; i <= N; i ++) if (ans[i] != 0.0) cnt ++;
printf("%d", cnt);
for (int i = N; i >= 0; i --) if (ans[i] != 0.0) printf(" %d %.1f", i, ans[i]);
}