设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分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>
int main()
{
int i,j,k=0,
mul[20000]={0},add[20000]={0},
c1[1000]={0},x1[1000]={0},
c2[1000]={0},x2[1000]={0},
c=0,x=0,
n1=0,n2=0;
scanf("%d",&n1);
for(i=0; i<n1; i++){
scanf("%d %d",&c1[i],&x1[i]); //c1存系数,x1存指数
add[x1[i]] = add[x1[i]] + c1[i];//加法运算结果中系数;
}
scanf("%d",&n2);
for(i=0; i<n2; i++){
scanf("%d %d",&c2[i],&x2[i]);
add[x2[i]] = add[x2[i]] + c2[i];///用来储存加法运算结果中的系数;
}
for(i=0; i<n1; i++){
for(j=0; j<n2; j++){
c = c1[i] * c2[j];
x = x1[i] + x2[j];//指数下标
mul[x] = mul[x] + c;//系数;
}
}
//输出多项式的积
for(i=2000,k=0; i>=0; i--){
if(mul[i] != 0){
c1[k] = mul[i];//系数
x1[k] = i;//指数
k++;
}//if
}//for
for(i=0; i<k; i++){
printf("%d %d",c1[i],x1[i]);
if(i<k-1) printf(" ");
}
if(k==0) printf("0 0");
printf("\n");
//输出多项式的和
for(i=1000,k=0; i>=0; i--){
if(add[i] != 0){
c2[k] = add[i];
x2[k] = i;
k++;
}//if
}//for
for(i=0; i<k; i++){
printf("%d %d",c2[i],x2[i]);
if(i<k-1) printf(" ");
}//for
if(k==0) printf("0 0");
return 0;
}