原题目如下:
这个题目与多项式加法两者挺相似的,存储方法也差不度,第一次写的代码如下
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
float poly[2001]={0}; //有可能两个数组最大幂指数都是1000,所以要保证最终结果最大幂指数是2000
float poly1[1001]={0};//这两个数组用于存放幂指数为n时候,对应系数an是多少
float poly2[1001]={0};
int N1,N2,exp,number=0;//exp用于存放输入时候的幂指数
float coe;//coe用于存放输入时候多项式的系数
cin>>N1;
for (int i=0;i<N1;i++)
{
cin>>exp>>coe;
poly1[exp]=poly1[exp]+coe;//有可能前后输入的两个多项式的幂指数是相同的
}
cin>>N2;
for (int i=0;i<N2;i++)
{
cin>>exp>>coe;
poly2[exp]=poly2[exp]+coe;
}
for (int i=0;i<1001;i++)
{
if(poly1[i]!=0)
{
for (int j=0;j<1001;j++)
{
if(poly[i+j]==0&&poly2[j]!=0)//number用于统计最后乘积之后多项式有多少项,如果没有相乘之前是0,而相乘之后不是0,那么number++
number++;
poly[i+j]=poly[i+j]+poly1[i]*poly2[j];
if(poly[i+j]==0&&poly2[j]!=0)//如果乘积之后先前的多项式相加之和被合并掉了,此处number--,如(x+1)(x-1)最后不含有x一次项
number--;
}
}
}
cout<<number;
for (int i=2000;i>=0;i--)
{
if(poly[i]!=0)
cout<<' '<<i<<' '<<fixed<<setprecision(1)<<poly[i];//注意这个地方保留一位小数用法
}
return 0;
}
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
float poly[2001]={0}; //有可能两个数组最大幂指数都是1000,所以要保证最终结果最大幂指数是2000
float poly1[1001]={0};//这两个数组用于存放幂指数为n时候,对应系数an是多少
float poly2[1001]={0};
int N1,N2,exp,number=0;//exp用于存放输入时候的幂指数
float coe;//coe用于存放输入时候多项式的系数
cin>>N1;
for (int i=0;i<N1;i++)
{
cin>>exp>>coe;
poly1[exp]=poly1[exp]+coe;//有可能前后输入的两个多项式的幂指数是相同的
}
cin>>N2;
for (int i=0;i<N2;i++)
{
cin>>exp>>coe;
poly2[exp]=poly2[exp]+coe;
}
for (int i=0;i<1001;i++)
{
if(poly1[i]!=0)
{
for (int j=0;j<1001;j++)
{
poly[i+j]=poly[i+j]+poly1[i]*poly2[j];
}
}
}
for (int i=2000;i>=0;i--)
{
if(poly[i]!=0)
number++;//number用于统计最后乘积之后多项式有多少项
}
cout<<number;
for (int i=2000;i>=0;i--)
{
if(poly[i]!=0)
cout<<' '<<i<<' '<<fixed<<setprecision(1)<<poly[i];//注意这个地方保留一位小数用法
}
return 0;
}