设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分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>
struct Poly{
int ex;
int co;
}Poly[1001];
int main(){
int a,b,A[2005]={0},B[1005]={0};
scanf("%d",&a);
int temp1,temp2;
for(int i=0;i<a;i++){
scanf("%d%d",&Poly[i].co,&Poly[i].ex);//先输入系数,后输入指数
B[Poly[i].ex]+=Poly[i].co; //指数作为下标,系数作为数组元素
}
scanf("%d",&b);
for(int i=0;i<b;i++){
scanf("%d%d",&temp1,&temp2);
B[temp2]+=temp1;
for(int j=0;j<a;j++)
A[temp2+Poly[j].ex]+=(temp1*Poly[j].co);//指数相加,系数相乘
}
int isfirst=1,haveoutput=0;//isfirst判断是否是第一个输出,haveoutput判断最后是否是零多项式
for(int i=2000;i>=0;i--){
if(A[i]!=0){
if(!isfirst) printf(" %d %d",A[i],i);
if(isfirst){
isfirst=0;
printf("%d %d",A[i],i);
}
haveoutput=1; //如果执行了if语句则不是零多项式
}
}
if(!haveoutput) printf("0 0");
haveoutput=0; //重置判断第二次输出是否是零多项式
isfirst=1; //重置判断第二次输出的第一项
putchar('\n');
for(int i=1000;i>=0;i--){
if(B[i]!=0){
if(!isfirst) printf(" %d %d",B[i],i);
if(isfirst){
printf("%d %d",B[i],i);
isfirst=0;
}
haveoutput=1;
}
}
if(!haveoutput) printf("0 0");
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
|