题意分析:
(1)给出两个多项式:项数 指数 系数...,求这两个多项式的乘积并按照原来格式输出
(2)与1002相反,先应将多项式1用数组存起来(使用结构体数组连续存储),当输入多项式2的项时,分别将其与多项式1的每一项乘积的结果存入另外一个数组(浮点数数组,针对元素不多的情况),指数的和为对应的下标,同时更新数组元素的值(加上系数乘积)。最后逆序打印,避免排序
可能坑点:
(1)在计算项数时注意:若数组当中对应的数为0,而计算的乘积不为0,相当于当前的乘积结果增加了一项;若数组元素不为0,相加之后为0,则减少了一项;其余不加也不减。
#include <iostream>
#include <iomanip>
using namespace std;
struct poly
{
int exp;
double coeff;
};
poly poly1[10];
double product[1000001]={0};
int main()
{
int K,i=0,j=0,cnt=0;
int exp;
double coeff;
cin>>K;
while(i<K)
{
cin>>poly1[i].exp>>poly1[i].coeff;
i++;
}
cin>>K;
while(j<K)
{
cin>>exp>>coeff;
for(int k=0;k<i;k++)
{
int index=exp+poly1[k].exp;
if(product[index]==0)cnt++;
product[index]+=coeff*poly1[k].coeff;
if(product[index]==0)cnt--;
}
j++;
}
cout<<cnt;
for(int k=1000000;k>=0;k--)
{
if(product[k]!=0)
{
cout<<" "<<k<<" "<<setiosflags(ios::fixed)<<setprecision(1)<<product[k];
}
}
cout<<endl;
return 0;
}