设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:
输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0
。
样例">样例">输入样例:
4 3 4 -5 2 6 1 -2 0
3 5 20 -7 4 3 1
输出样例:
15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
5 20 -4 4 -5 2 9 1 -2 0
思路:根据多项式的计算过程模拟一下就行了,坑点是数组要开到2000以上
#include<bits/stdc++.h>
using namespace std;
const int N=2010;//开1010有一个点过不去,比如x^1000*x^1000=x^2000
int a[N],b[N],c[N],d[N],f1[N],f2[N];
int n,m;
int main()
{
cin>>n;
for(int i=0;i<n;i++) cin>>a[i]>>b[i],f2[b[i]]+=a[i];//输入并求和
cin>>m;
for(int i=0;i<m;i++) cin>>c[i]>>d[i],f2[d[i]]+=c[i];
for(int i=0;i<n;i++)//多项式乘法运算
{
for(int j=0;j<m;j++)
{
f1[b[i]+d[j]]+=a[i]*c[j];
}
}
int f=0;
for(int i=N;i>=0;i--)
{
if(f1[i])
{
if(f++) cout<<' ';//控制空格并标记
cout<<f1[i]<<' '<<i;
}
}
if(!f) cout<<"0 0";//零多项式
cout<<endl;
int t=0;
for(int i=N;i>=0;i--)
{
if(f2[i])
{
if(t++) cout<<' ';
cout<<f2[i]<<' '<<i;
}
}
if(!t) cout<<"0 0";
return 0;
}