天天看點

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

           

繼續閱讀