1. 程式人生 > >資料結構- 一元多項式的乘法與加法運算

資料結構- 一元多項式的乘法與加法運算

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<iostream>
using namespace std;
#define maxn 10005
int a[maxn],b[maxn];
int sum[maxn],mul[maxn];
int main()
{
	int n;
	scanf("%d",&n);
	for(int i = 1; i <= n; i ++)
	{
		int x,y;
		scanf("%d %d",&x,&y);
		a[y] += x;
		sum[y] += x;
	}
	scanf("%d",&n);
	for(int i = 1; i <= n; i ++)
	{
		int x,y;
		scanf("%d %d",&x,&y);
		b[y] += x;
		sum[y] += b[y];
	}
	for(int i = 0; i <= 1000; i ++)
	{
		if(a[i])
		{
			for(int j = 0; j <= 1000; j ++)
			{
				if(b[j])
				{
					mul[i+j] += a[i]*b[j];
				} 
			}
		}
	}
	int flag = 0;
	for(int i = 2000; i >= 0; i --)
	{
		if(mul[i])
		{
			if(flag)
				printf(" %d %d",mul[i],i);
			else
			{
				printf("%d %d",mul[i],i);
				flag = 1;
			}
		}
	}
	if(!flag)
		printf("0 0");
	printf("\n");
	int flag2 = 0;
	for(int i = 1000; i >= 0; i --)
	{
		if(sum[i])
		{
			if(flag2)
				printf(" %d %d",sum[i],i);
			else
			{
				printf("%d %d",sum[i],i);
				flag2 = 1;
			}
		}
	}
	if(!flag2)
		printf("0 0");
	printf("\n");
}