http://www.patest.cn/contests/pat-a-practise/1009
思路:用数组的下标对应指数,数组储存的值对应系数。记录每个多项式的最高次以减少运算量。
#include <stdio.h>
#define maxn 1005
#define LOCAL
using namespace std;
int main()
{
#ifdef LOCAL
freopen("PAT1009.txt","r",stdin);
#endif
float a[maxn]={0},b[maxn]={0},c[2*maxn]={0};
int Ka,Kb,Kc=0,exp,expa=0,expb=0;
scanf("%d",&Ka);
while(Ka--){
scanf("%d",&exp);
if(exp>expa){ //expa保存代数式a的最高次数
expa=exp;
}
scanf("%f",&a[exp]);
}
scanf("%d",&Kb);
while(Kb--){
scanf("%d",&exp);
if(exp>expb){
expb=exp; //expb保存代数式b的最高次数
}
scanf("%f",&b[exp]);
}
for(int i=0;i<=expa;++i){
for(int j=0;j<=expb;++j){
c[i+j]+=a[i]*b[j];
}
}
for(int i=0;i<=expa+expb;++i){
if(c[i]!=0.0){
++Kc;
}
}
printf("%d",Kc);
for(int i=expa+expb;i>=0;--i){
if(c[i]!=0.0){
printf(" %d %.1f",i,c[i]);
}
}
return 0;
}