问题描述:计算两个多项式的乘积。
解题思路:蛮力算法,直接用第二个多项式的每一项去乘以第一个多项式的每一项并相加。注意系数可能为0和浮点数等于0的判断方法。
AC代码:
/*1009 Product of Polynomials (25 分)
*用关联容器map,key为幂,value为系数
*/
#include<iostream>
#include<map>
#include<algorithm>
using namespace std;
map<int,double,greater<int> >A,out;
int main()
{
freopen("test.txt","r",stdin);
double e;
int n,k;
scanf("%d",&k);
while(k--){
scanf("%d %lf",&n,&e);
A[n]=e;
}
scanf("%d",&k);
map<int,double>::iterator i;
while(k--){
scanf("%d %lf",&n,&e);
i=A.begin();
while(i!=A.end()){
int x=n+i->first;
if(out.count(x)){
double y=out[x]+e*i->second;//注意可能相加后系数为0
if(y<0.000001)out.erase(x);
else out[x]=y;
}else out[x]=e*i->second;
++i;
}
}
i=out.begin();
printf("%d",out.size());
while(i!=out.end()){
printf(" %d %.1lf",i->first,i->second);
++i;
}
return 0;
}