PTA练习题 : 一元多项式的乘法与加法运算

设计函数分别求两个一元多项式的乘积与和。
输入格式:

输入分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>
#include<stdlib.h>

int multiplicating(int A1[][2],int A2[][2],int B[][2],int count1,int count2); // 乘法函数 
int add(int A1[][2],int A2[][2],int B[][2],int count1,int count2); // 加法函数 
int create(int arr[][2]); // 输入 
void sort(int arr[][2],int *count); // 排序 
void print(int arr[][2],int count); // 打印 

int main()
{
	int A1[100][2]; // 第一个多项式 A1[i][0]为底数,A1[i][1]为指数 
	int A2[100][2];
	int B1[100][2];
	int B2[100][2];
	int arr[4]; // 存储多项式项数 
	arr[0] = create(A1);
	arr[1] = create(A2);
	arr[2] = add(A1,A2,B1,arr[0],arr[1]);
	arr[3] = multiplicating(A1,A2,B2,arr[0],arr[1]);
	sort(B2,&arr[3]);
	print(B2,arr[3]);
	print(B1,arr[2]);
	return 0;
}
void print(int arr[][2],int count)
{
	if(count != 0)
	{
		for(int i=0;i<count;i++)
		{
			if(arr[i][0] != 0)
			{
				if(i == count-1)
				{
					printf("%d %d\n",arr[i][0],arr[i][1]);
				}
				else
				{
					printf("%d %d ",arr[i][0],arr[i][1]);
				}
			}
		}
	}
	else
	{
		printf("0 0\n");
	}
}
int multiplicating(int A1[][2],int A2[][2],int B[][2],int count1,int count2)
{
	int count = 0;
	for(int i=0;i<count1;i++)
	{
		for(int j=0;j<count2;j++)
		{

			B[count][0] = (A1[i][0] * A2[j][0]);
			B[count][1] = (A1[i][1] + A2[j][1]);
			count++;
		}
	}
	return count;
}
int add(int A1[][2],int A2[][2],int B[][2],int count1,int count2)
{
	int i1 = 0;
	int i2 = 0;
	int count = 0;
	while(i1<count1 && i2<count2)
	{
		if(A1[i1][1] < A2[i2][1])
		{
			B[count][0] = A2[i2][0];
			B[count][1] = A2[i2][1];
			count++;
			i2++;
		}
		else if(A1[i1][1] > A2[i2][1])
		{
			B[count][0] = A1[i1][0];
			B[count][1] = A1[i1][1];
			count++;
			i1++;
		}
		else
		{
			if((A1[i1][0] + A2[i2][0]) != 0)
			{
				B[count][0] = A1[i1][0] + A2[i2][0];
				B[count][1] = A1[i1][1] ;
				count++;
			}
			i1++;
			i2++;
		}
	}
	while(i1 < count1)
	{
		B[count][0] = A1[i1][0];
		B[count][1] = A1[i1][1];
		count++;
		i1++;
	}
	while(i2 < count2)
	{
		B[count][0] = A2[i2][0];
		B[count][1] = A2[i2][1];
		count++;
		i2++;
	}
	return count;
}
int create(int arr[][2])
{
	int i = 0;
	int n;
	scanf("%d",&n);
	while(i<n)
	{
		scanf("%d %d",&arr[i][0],&arr[i][1]);
		i++;
	}
	return n;
}
void sort(int arr[][2],int *count)
{
	for(int i=0;i<*count-1;i++)
	{
		for(int j=1+i;j<*count;j++)
		{
			if(arr[i][1] < arr[j][1])
			{
				int temp1 = arr[i][0];
				int temp2 = arr[i][1];
				arr[i][0] = arr[j][0];
				arr[i][1] = arr[j][1];
				arr[j][0] = temp1;
				arr[j][1] = temp2;
			}
			if(arr[i][1] == arr[j][1])
			{
				arr[i][0] += arr[j][0];
				for(int z = j;j<*count-1;j++)
				{
					arr[j][0] = arr[j+1][0];
					arr[j][1] = arr[j+1][1];
				}
				*count -= 1;
				i = 0;
				break;
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_45735242/article/details/105842516
今日推荐