AcWing 1481. 多项式乘积
原题链接
简单
作者:
eveer
,
2021-08-26 20:55:49
,
所有人可见
,
阅读 236
#include<bits/stdc++.h>
using namespace std;
const int N=2010;//这里一定要注意相乘之后,系数将最多达到2000
float a[N];//a[i]表示次数为i的位置上的系数
float b[N];//b[i]表示次数为i的位置上的系数
float res[N];//res[i]表示最终结果次数为i的位置上的系数
int main()
{
int num_a;
scanf("%d",&num_a);
int max_expa;//记录多项式a的最高次数
for(int i=0;i<num_a;i++)
{
int exp;
float coef;
scanf("%d%f",&exp,&coef);
a[exp]=coef;
if(i==0)max_expa=exp;
}
int num_b;
scanf("%d",&num_b);
int max_expb;//记录多项式a的最高次数
for(int i=0;i<num_b;i++)
{
int exp;
float coef;
scanf("%d%f",&exp,&coef);
b[exp]=coef;
if(i==0)max_expb=exp;
}
//采用for循环直接遍历的形式,因为次数多项式项数只有10个,那么10*10=100,最多只要遍历100次即可,时间上允许
for(int i=0;i<=max_expa;i++)//依次遍历a中的每一项
{
if(a[i]!=0)//只有在系数不等于0的情况下,才会乘以b中的每一项
{
for(int j=0;j<=max_expb;j++)//一次遍历b中的每一项
{
if(b[j]!=0)//只有b的第j项不等于0,才会相乘,否则,0系数乘以其他项都只有0
{
res[i+j]+=a[i]*b[j];//两项相乘,次数相加,系数相乘
}
}
}
}
int max_exp=max_expa+max_expb;//最高次数相加,即为最终结果的次数
int cnt=0;
for(int i=0;i<=max_exp;i++)
if(res[i]!=0)cnt++;//记录一共有多少项
printf("%d",cnt);
for(int i=max_exp;i>=0;i--)
if(res[i]!=0)
printf(" %d %.1f",i,res[i]);
return 0;
}