设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分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
思路:暴力求解,用4个数组,两个数组存储数据,一个数组实现加法,一个数组实现乘法,没有用链表,因为实现起来太麻烦
#include<cstdio>
#define maxsize 2010int main()
{
int A1[maxsize]={0};
int A2[maxsize]={0};
int A3[maxsize]={0};
int A4[maxsize]={0};
int i,j,m,n,x,exp;
int max1,max2,min1,min2;
max1=max2=0;
min1=min2=1000;
scanf("%d",&m);
for(int i=0;i<m;i++)
{
scanf("%d%d",&x,&exp);
A1[exp]=x;
if(exp>=max1) max1=exp;
if(exp<=min1) min1=exp;
}
getchar();
scanf("%d",&n);
for(int j=0;j<n;j++)
{
scanf("%d%d",&x,&exp);
A2[exp]=x;
if(exp>=max2) max2=exp;
if(exp<=min2) min2=exp;
}
int max=max1>=max2?max1:max2;
int min=min1<min2?min1:min2;
int cnt=0;
int flag=0;
for(i=0;i<=max1;i++) //乘法部分
{
for(j=0;j<=max2;j++)
{
A4[i+j]=A4[i+j]+A1[i]*A2[j];
}
}
for(i=max1+max2;i>=min1+min2;i--)
{
if(A4[i]==0) continue;
else
{
if(cnt++!=0) printf(" %d %d",A4[i],i);
else printf("%d %d",A4[i],i);
flag++;
}
}
if(flag==0) printf("0 0");
printf("\n");
cnt=0;
flag=0;
for(i=0;i<=max;i++) //加法部分
{
A3[i]=A1[i]+A2[i];
}
for(i=max;i>=min;i--)
{
if(A3[i]==0) continue;
else
{
if(cnt++!=0) printf(" %d %d",A3[i],i);
else printf("%d %d",A3[i],i);
flag++;
}
}
if(flag==0) printf("0 0");
printf("\n");
return 0;
}