https://www.patest.cn/contests/pat-a-practise/1009
遵循多项式相乘规则,求多项式a+b的乘积。
PAT-1002中已经做过多项式相加的题目,思路大致相同。
模拟多项式相乘的过程,需要注意不能用判断是否poly[i]为0来判断i是否在A中出现过,因为poly[i]的值有可能是由之前的相乘产生的,所以标明哪些数在A中出现过,而且用第二个数组存放解。
#include
#include
using namespace std;
const int maxn = 2005;
int main()
{
bool inA[maxn] = {false};
double poly[maxn], add[maxn], t; //必须用两个数组,否则会影响判断
for (int i = 0; i < maxn; ++i)
poly[i] = add[i] = 0.0;
int Acnt, Bcnt, exp;
cin >> Acnt;
for (int i = 0; i < Acnt; ++i)
{
cin >> exp >> t;
poly[exp] = t;
inA[exp] = true; //标识出现过
}
cin >> Bcnt;
while(Bcnt--)
{
cin >> exp >> t;
for (int i = 0; i < maxn; ++i)
if (inA[i]) //需要指数相加
add[i+exp] += poly[i]*t;
}
int non_zero = 0;
for (int i = maxn-1; i >= 0; --i)
{
if (add[i] != 0) non_zero++;
}
cout << non_zero;
for (int i = maxn-1; i >= 0; --i)
{
if (add[i] != 0)
printf(" %d %.1f", i, add[i]);
}
return 0;
}