- 7-1 一元多项式的乘法与加法运算 (20 分)
设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分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
代码:
#include<stdio.h>
#include<stdlib.h>
#define N 50000
int main(void)
{
int a[N]={0},b[N]={0};
int c[N]={0},d[N]={0};//系数 指数
int i,j,m,n,x,y,cnt=0;
scanf("%d",&m);
while(m--){
scanf("%d%d",&x,&y);
a[y]+=x; //指数为y的系数放在x的位置上
}
scanf("%d",&m);
while(m--){
scanf("%d%d",&x,&y);
b[y]+=x; //指数为y的系数放在x的位置上
}
//多项式积的运算 输出
for(i=0;i<N;i++){
if(a[i]){
for(j=0;j<N;j++){
if(b[j]){
c[i+j]+=a[i]*b[j];
}
}
}
}
for(i=N-1;i>=0;i--){
if(c[i]){
if(cnt) printf(" ");
printf("%d %d",c[i],i);
cnt++;
}
}
if(!cnt){
printf("0 0");
}
printf("\n");
//多项式加法
for(i=0;i<N;i++){
if(a[i]){
d[i]+=a[i];
}
if(b[i]){
d[i]+=b[i];
}
}
cnt=0;
for(i=N-1;i>=0;i--){
if(d[i]){
if(cnt) printf(" ");
printf("%d %d",d[i],i);
cnt++;
}
}
if(!cnt){
printf("0 0");
}
return 0;
}