题目链接
题目是进行多项式的乘法,大体思路同多项式加法差不多,都是利用hash思想存,数组下标为几次项,元素为所对应的系数;
但要注意,进行乘法时几次项会变即:x ^ 2 * x ^ 2=x^4;
所以实现a[i]*b[j]的同时,存储的位置变为了c[i+j];
此外,他的最大次数不再是1000,可能达到1000+1000=2000;
#include <iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<string>
#include<stack>
#include<math.h>
#include<vector>
using namespace std;
double a[1005], b[1005];
int main() {
int count1;
cin >> count1;
for (int i = 1;i <= count1;i++)
{
int k;
cin >> k;
cin >> a[k];
}
int count2;
cin >> count2;
for (int i = 1;i <= count2;i++)
{
int k;
cin >> k;
cin >> b[k];
}
double c[2010] = { 0 };
int count3=0;
for (int i = 0;i <= 1000;i++)
{
for (int j = 0;j <= 1000;j++)
{
c[i + j]+= a[i] * b[j];
}
}
for (int i = 2000;i >= 0;i--) if (c[i]) count3++;
cout << count3;
for (int i = 2000;i >=0;i--)
{
if (c[i]) {
printf(" %d %.1lf", i, c[i]);
}
}
return 0;
}