C# · 12月 20, 2021

数据结构作业6–链表的改进及其应用

7-22 一元多项式的乘法与加法运算 (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

#include

#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 cnt=0;

scanf(“%d”,&i); //读入第一个单项式

while( i– )

{

scanf(“%d %d”,&x,&z);

a[z] += x; //指数为z的系数放在z位置上

}

scanf(“%d”,&i); //读入第二个单项式

while( i– )

{

scanf(“%d %d”,&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( cnt )

{

//处理结尾不能有多余空格

printf(” “);

}

printf(“%d %d”,c[i],i);

cnt++;

}

}

if( !cnt )

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];

}

//输出多项式加法结果

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;

}