浙江大学PAT上机题解析之3-04. 一元多项式的乘法与加法运算

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

输入格式说明:

输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。

输出格式说明:

输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。

样例输入与输出:

 

 

 

序号输入输出
1
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
2
2 1 2 1 0
2 1 2 -1 0
1 4 -1 0
2 2
3
2 -1000 1000 1000 0
2 1000 1000 -1000 0
-1000000 2000 2000000 1000 -1000000 0
0 0
4
0
1 999 1000
0 0
999 1000

 

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

typedef struct Term{
	int coe;//系数
	int exp;//指数	
}Term;

bool compare(Term a,Term b)
{
	return a.exp>b.exp;
}

/*
Term Mul(Term a,Term b)
{
	a.coe = a.coe*b.coe;
	a.exp = a.exp+b.exp;
	return a;
}
*/

/*
Term Add(Term a,Term b)
{
	a.coe +=b.coe;
	return a;
}*/
void print(Term a)
{
	cout<<a.coe<<" "<<a.exp<<" ";
}
int main()
{

	vector<Term>    vec1;
	vector<Term>    vec2;
	vector<Term>    vec;
	vector<Term>::iterator  it1,it2;

	int N1,N2;
	int coe,exp;
	bool  flag = false;
	Term t;
	cin>>N1;
	while(N1--)
	{
		cin>>coe>>exp;
		t.coe = coe;
		t.exp = exp;
		vec1.push_back(t);
	}
	//for_each(vec1.begin(),vec1.end(),print);
	//system("pause");

	
	cin>>N2;
	while(N2--)
	{
		cin>>coe>>exp;
		t.coe = coe;
		t.exp = exp;
		vec2.push_back(t);
	}

	//for_each(vec2.begin(),vec2.end(),print);
	//system("pause");

	for (it1=vec1.begin();it1!=vec1.end();it1++)
		for (it2=vec2.begin();it2!=vec2.end();it2++)
		{
            t.coe = it1->coe * it2->coe;
			t.exp = it1->exp + it2->exp;	
			if (t.coe!=0)
            vec.push_back(t);

		}
			
	sort(vec.begin(),vec.end(),compare);

	for (it1 = vec.begin();it1!=vec.end();it1=it2)
	  {  
		  for (it2 = it1+1;it2!=vec.end() &&it1->exp==it2->exp;it2++)	      	
				   it1->coe += it2->coe;
			if (it1->coe!=0)
			{
				if (flag)
				cout<<" ";
				else
				flag = true;
				cout<<it1->coe<<" "<<it1->exp;
			}			       
	  }
	if (vec1.size()==0)
	{
		cout<<"0 0";
	}
	cout<<endl;
	flag = false;

	for (it1=vec1.begin(),it2=vec2.begin();it1!=vec1.end()&&it2!=vec2.end();)
	{
		if (it1->exp >it2->exp)
		{
			if (flag)
				cout<<" ";
			else
				flag = true;
			cout<<it1->coe<<" "<<it1->exp;
			it1++;
		}
		else if (it1->exp < it2->exp)
		{
			if (flag)
				cout<<" ";
			else
				flag = true;
			cout<<it2->coe<<" "<<it2->exp;
			it2++;
		}
		else
		{

			if ((it1->coe+it2->coe))
			{
				if (flag)
					cout<<" ";
				else
					flag = true;
				cout<<it1->coe+it2->coe<<" "<<it1->exp;
			}
			
			it1++;
			it2++;
		}
	}

	if (it1==vec1.end())
	{
		while(it2!=vec2.end())
		{
			if (flag)
				cout<<" ";
			else
				flag = true;
			cout<<it2->coe<<" "<<it2->exp;
			it2++;
		}
	}

	if (it2==vec2.end())
	{
		while(it1!=vec1.end())
		{
			if (flag)
				cout<<" ";
			else
				flag = true;
			cout<<it1->coe<<" "<<it1->exp;
			it1++;
		}
	}

	if (flag==false)
	cout<<"0 0";
	cout<<endl;

	 //for_each(vec.begin(),vec.end(),print);
	

	//system("pause");
	return 0;
}


//题目不难,注意细节即可

 

 

 

 

 

转载于:https://www.cnblogs.com/ainima/p/6331245.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 一元多项式乘法运算是指将两个或多个一元多项式相乘的运算。例如,将多项式f(x)=3x^2+2x+1和g(x)=4x^3+5x^2+6x+7相乘,得到的结果为: f(x)×g(x) = (3x^2+2x+1)×(4x^3+5x^2+6x+7) = 12x^5+23x^4+32x^3+31x^2+18x+7 一元多项式加法运算是指将两个或多个一元多项式相加的运算。例如,将多项式f(x)=3x^2+2x+1和g(x)=4x^3+5x^2+6x+7相加,得到的结果为: f(x)+g(x) = (3x^2+2x+1)+(4x^3+5x^2+6x+7) = 4x^3+8x^2+8x+8 在一元多项式乘法加法运算中,需要注意多项式的次数和系数的运算。同时,还需要注意运算的顺序和规律,以避免出现错误。 ### 回答2: 一元多项式乘法运算是指将两个多项式相乘得到一个新的多项式。例如,(3x + 2)(4x + 5)可以通过分配律展开得到12x^2 + 23x + 10。在进行乘法运算时,我们需要将每个多项式中的每一项相乘,然后将结果相加。 与乘法不同,一元多项式加法运算比较简单,只需要将相同次数的项的系数相加即可。例如,(2x^2 + 3x + 4) + (5x^2 + 2x + 1) = 7x^2 + 5x + 5。如果两个多项式中存在相同次数的项,我们只需要将它们的系数相加,然后将结果写在相同次数的项下面。 在进行一元多项式乘法加法运算时,我们需要注意多项式的次数。对于一个多项式P(x),它的次数指的是其中最高阶项的次数。例如,对于P(x) = 2x^3 + 3x^2 + 4x + 1,其次数为3,因为最高阶项是2x^3。 那么,怎样进行一元多项式乘法加法运算呢?下面给出具体的计算方法: 1. 一元多项式乘法运算 对于两个多项式P(x)和Q(x),它们的乘积可以表示为: P(x)Q(x) = (a_nx^n + a_{n-1}x^{n-1} + ... + a_1x + a_0) × (b_mx^m + b_{m-1}x^{m-1} + ... + b_1x + b_0) 其中,a和b分别表示两个多项式中各项的系数,n和m分别表示它们的次数。 我们可以使用分配律将每一个项相乘,然后将所有的结果相加。例如,对于P(x) = 3x^2 + 2x + 1和Q(x) = 4x + 5,它们的乘积可以表示为: P(x)Q(x) = (3x^2 + 2x + 1) × (4x + 5) = 12x^3 + 15x^2 + 8x^2 + 10x + 4x + 5 = 12x^3 + 23x^2 + 14x + 5 在进行乘法运算时,我们需要按照降幂的顺序从高到低依次计算每一项。例如,在计算12x^3时,我们需要将P(x)和Q(x)中次数为3的项相乘,即3x^2 × 4x,然后将结果12x^3写在新多项式中次数为3的项下面。 2. 一元多项式加法运算 对于两个多项式P(x)和Q(x),它们的和可以表示为: P(x) + Q(x) = (a_nx^n + a_{n-1}x^{n-1} + ... + a_1x + a_0) + (b_mx^m + b_{m-1}x^{m-1} + ... + b_1x + b_0) 其中,a和b分别表示两个多项式中各项的系数,n和m分别表示它们的次数。 我们只需要将相同次数的项的系数相加即可。例如,对于P(x) = 2x^2 + 3x + 4和Q(x) = 5x^2 + 2x + 1,它们的和可以表示为: P(x) + Q(x) = (2x^2 + 3x + 4) + (5x^2 + 2x + 1) = 7x^2 + 5x + 5 在进行加法运算时,我们需要将P(x)和Q(x)中相同次数的项的系数相加,然后将结果写在新多项式中相同次数的项下面。如果两个多项式中不存在相同次数的项,我们可以直接将它们写在新的多项式中。 ### 回答3: 一元多项式乘法运算指的是两个多项式相乘得到一个新的多项式。一元多项式乘法运算可以通过拆分展开的方式进行,具体方法为将每个多项式的各项相乘,再将所有相乘得到的项进行合并。例如,设有两个一元多项式f(x)和g(x) f(x) = a0 + a1x + a2x^2 + …… + anx^n g(x) = b0 + b1x + b2x^2 + …… + bmx^m 则f(x)和g(x)的乘积fg(x)为 fg(x) = (a0b0) + (a0b1 + a1b0)x + (a0b2 + a1b1 + a2b0)x^2 + …… + (anbm)x^n+m 其中,aibj表示f(x)和g(x)中第i+1项和第j+1项的系数的乘积。可以看出,fg(x)的次数为f(x)和g(x)的次数之和。 与乘法不同,一元多项式加法运算是将两个多项式相加得到一个新的多项式。具体方法为将f(x)和g(x)中同一次项的系数相加,然后将所有相加得到的项进行合并。例如,设有两个一元多项式f(x)和g(x) f(x) = a0 + a1x + a2x^2 + …… + anx^n g(x) = b0 + b1x + b2x^2 + …… + bmx^m 则f(x)和g(x)的和f+g(x)为 f+g(x) = (a0+b0) + (a1+b1)x + (a2+b2)x^2 + …… + (an+bm)x^max{n,m} 其中,max{n,m}表示n和m中的最大值。可以看出,f+g(x)中的次数不超过max{n,m}。 一元多项式乘法加法运算在代数学中有广泛的应用。在多项式的乘法运算中,还存在着多项式的因式分解和求根等问,是数学中的重要研究领域。在实际应用中,多项式的乘法和加法也常用于信号处理、计算机科学等领域。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值