您的位置:首页 > 其它

一元多项式的乘法与加法运算(20 分)

2017-11-01 09:45 302 查看



7-2 一元多项式的乘法与加法运算(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>
int main()
{
//	freopen("input.txt","r",stdin);
int n,num1,num2,i,j,a[1005]={0},b[2005]={0},max,flag = 1,c[1005]={0};
scanf("%d",&n);
for(i = 0;i < n;i++)
{
scanf("%d%d",&num1,&num2);
a[num2] = num1;//用系数做下标
c[num2] = num1;//存储多项式相加的和,先把第一个多项式直接存进去
if(flag)
{
max = num2;//最大指数
flag = 0;
}
}
scanf("%d",&n);
for(i = 0;i < n;i++)
{
scanf("%d%d",&num1,&num2);
c[num2]+=num1;//两个多项式相加,如果原来的c[num2]是否为0都没有影响
for(j = max;j >= 0;j--)//把第一个多项式遍历相乘
{
if(a[j] != 0)
{
b[j+num2] += a[j]*num1;//相乘
}
}
}
flag = 1;//作为输出格式的标记和是否0多项式的判断,输出格式始终没有变说明是0多项式,输出 0 0
for(i = 2004;i >= 0;i--)
{
if(b[i] != 0)
{
if(flag)
{
printf("%d %d",b[i],i);//注意输出格式
flag = 0;
}
else{
printf(" %d %d",b[i],i);
}
}
}
if(flag)
{
printf("0 0");//0多项式
}
printf("\n");

flag = 1;
//作为输出格式的标记和是否0多项式的判断,输出格式始终没有变说明是0多项式,输出 0 0
for(i = 1004;i >= 0;i--){if(c[i] != 0){if(flag){printf("%d %d",c[i],i);flag = 0;}else{printf(" %d %d",c[i],i);}}}if(flag){printf("0 0");}printf("\n");return 0;}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: