7-1 一元多项式的乘法与加法运算 (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()
{
    
    
	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;
}

猜你喜欢

转载自blog.csdn.net/YSA_SFPSDPGY/article/details/114851528
今日推荐