7-2 一元多项式的乘法与加法运算(20 分)

#include<iostream>
using namespace std;
typedef struct LNode * List;
struct LNode {
	int coef;
	int expon;
	List Next;
};
void Attach(List L, int coef, int expon)
{
	if (!L)
	{
		L->coef = coef;
		L->expon = expon;
		L->Next = NULL;
	}
	else
	{
		List p = L;
		while (p->Next)
			p = p->Next;
		List tmp = new struct LNode;
		tmp->coef = coef;
		tmp->expon = expon;
		p->Next = tmp;
		tmp->Next = NULL;
	}
}
List Read()
{
	List L = new struct LNode;
	L->Next = NULL;
	int N;
	int coef, expon;
	cin >> N;
	cin.get();
	while (N--)
	{
		cin >> coef;
		cin.get();
		cin >> expon;
		cin.get();
		Attach(L, coef, expon);
	}
	List p = L;
	L = L->Next;
	delete p;
	return L;
}

List Add(List L1, List L2)
{
	List L = new struct LNode;
	L->Next = NULL;
	if (!L1)return L2;
	else if (!L2)return L1;
	else if (!L1 || !L2)return NULL;
	List p1, p2;
	p1 = L1;
	p2 = L2;
	while (p1&&p2)
	{
		if (p1->expon > p2->expon)
		{
			Attach(L, p1->coef, p1->expon);
			p1 = p1->Next;
		}
		else if (p1->expon < p2->expon)
		{
			Attach(L, p2->coef, p2->expon);
			p2 = p2->Next;
		}
		else
		{
			if (p1->coef + p2->coef != 0)
				Attach(L, p1->coef + p2->coef, p1->expon);
			p1 = p1->Next;
			p2 = p2->Next;
		}
	}
	while (p1) {
		Attach(L, p1->coef, p1->expon);
		p1 = p1->Next;
	}
	while (p2) {
		Attach(L, p2->coef, p2->expon);
		p2 = p2->Next;
	}
	List tmp;
	tmp = L;
	L = L->Next;
	delete tmp;
	return L;
}
void Insert(List L, int coef, int expon)
{
	List p = L;
	while (p->Next&&p->Next->expon > expon)
		p = p->Next;
	if (p->Next&&p->Next->expon == expon)
	{
		if (p->Next->coef + coef != 0)
			p->Next->coef += coef;
		else
		{
			List tmp = p->Next;
			p->Next = tmp->Next;
			delete tmp;
		}
	}
	else
	{
		List tmp = new struct LNode;
		tmp->coef = coef;
		tmp->expon = expon;
		tmp->Next = p->Next;
		p->Next = tmp;
	}
	
}
List Mult(List L1, List L2)
{
	List L = new struct LNode;
	L->Next = NULL;
	List p1, p2;
	p1 = L1, p2 = L2;
	int coef, expon;
	if (!L1 || !L2)
		return NULL;
	if (p1)
	{
		while (p2)
		{
			coef = p1->coef*p2->coef;
			expon = p1->expon + p2->expon;
			Attach(L, coef, expon);
			p2 = p2->Next;
		}
	}
	p1 = L1->Next;
	p2 = L2;	//重新赋值,p2已经为空
	while (p1)
	{
		List p = L;
		p2 = L2;		//	这里记得重新赋值,之前就是这里有问题
		while (p2)
		{
			coef = p1->coef*p2->coef;
			expon = p1->expon + p2->expon;
			Insert(L, coef, expon);
			p2 = p2->Next;
		}
		p1 = p1->Next;
	}
	List tmp;
	tmp = L;
	L = L->Next;
	delete tmp;
	return L;
}
void Print(List L)
{
	if (!L)
	{
		cout << 0 << " " << 0;
		return;
	}
	if (L)
	{
		cout << L->coef << " " << L->expon;
	}
	List p = L->Next;
	while (p)
	{
		cout << " " << p->coef << " " << p->expon;
		p = p->Next;
	}
}
int main()
{
	List L1 = Read();
	List L2 = Read();
	List A = Add(L1, L2);
	List M = Mult(L1, L2);
	Print(M);
	cout << endl;
	Print(A);
	cin.get();
	return 0;
}

思路是陈越老师课上讲的那个,这个是我自己写得,细节方面有些粗糙,仅供参考

运行截图

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答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}。 一元多项式乘法加法运算在代数学中有广泛的应用。在多项式的乘法运算中,还存在着多项式的因式解和根等问题,是数学中的重要研究领域。在实际应用中,多项式的乘法和加法也常用于信号处理、计算机科学等领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值