设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分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>
#define N 10000
int main()
{
int a[N] = {0};
int b[N] = {0};
int c[N] = {0}; //求积
int d[N] = {0}; //求和
int i ,j;
int x,z ; //系数 指数
int count=0;
scanf("%d",&i); //读入第一个多项式的项数
while( i-- ){
scanf("%d %d",&x,&z);
a[z] += x; //指数为z的系数放在z位置上
}
scanf("%d",&i); //读入第二个多项式的项数
while( i-- ){
scanf("%d %d",&x,&z);
b[z] += x;
}
//多项式乘法
for( i=N-1; i>=0; 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( count ){
//处理结尾不能有多余空格
printf(" ");
}
printf("%d %d",c[i],i);
count++;
}
}
if( !count ){
printf("0 0");
}
printf("\n");
//多项式加法
for( i=N-1; i>=0; i--){
if( a[i]){
d[i] += a[i];
}
}
for( j=N-1; j>=0; j--){
if( b[j]){
d[j] += b[j];
}
}
//输出多项式加法结果
count = 0;
for( i=N-1; i>=0; i--){
if( d[i] ){
if( count ){
printf(" ");
}
printf("%d %d",d[i],i);
count++;
}
}
if(!count){
printf("0 0");
}
return 0;
}