思路:
举个例子,(A+B+C)*(D+E+...),第一个括号里的第一项A分别去乘第二个括号里的每一项,相乘产生的新项中系数 = A、D的系数相乘,指数 = A、D的指数相加
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
using namespace std;
double a[1005],b[1005],res[2010];//下标存放指数,数组存放系数,注意最后结果的数组要大!!
int main()
{
int k1,k2,i,ii,maxa = 0,maxb = 0,maxres = 0;
double x,xx;
//输入
cin>>k1;
while(k1--)
{
cin>>i>>x;
a[i] += x;
if(i > maxa)
maxa = i;//求指数最高次数
}
cin>>k2;
while(k2--)
{
cin>>ii>>xx;
b[ii] += xx;
if(ii > maxb)
maxb = ii;
}
//多项式相乘
int j,k,count = 0;
for(j = 0;j <= maxa;j++)
{
for(k = 0;k <= maxb;k++)
{
if(a[j] != 0 && b[k] != 0)
{
res[j + k] += a[j] * b[k];//指数相加,系数相乘
if(j + k > maxres)
maxres = j + k;//求指数最高次数
}
}
}
//求项数
for(int r = 0;r <= maxres;r++)
{
if(res[r])
count++;
}
cout<<count;
for(int d = maxres;d >= 0;d--)
{
if(res[d] != 0)
printf(" %d %.1lf",d,res[d]);
}
cout<<endl;
return 0;
}