多项式的表示

1.多项式的系数存放在数组中

# include <iostream>
# include <cstdlib>
# define max(x,y) ((x)>(y)?(x):(y))
using namespace std;
const int N=100;
struct poly
{
int arr[N];
int mexp;
};

void add(poly &a,poly &b,poly &c)
{
	memset(c.arr,0,sizeof(c.arr));
	c.mexp=max(a.mexp,b.mexp);
	int i=0;
	for(;i<=c.mexp;i++)
		c.arr[i]=a.arr[i]+b.arr[i];
	cout<<"add result:"<<endl;
	cout<<c.mexp<<endl;
	for(i=0;i<=c.mexp;i++)
		cout<<c.arr[i]<<" ";
	cout<<endl;
}

void mul(poly &a,poly &b,poly &ans)
{
	memset(ans.arr,0,sizeof(ans.arr));
	ans.mexp=a.mexp+b.mexp;
	int i,j;
	for(i=0;i<=a.mexp;i++)
		for(j=0;j<=b.mexp;j++)
			ans.arr[i+j]+=a.arr[i]*b.arr[j];
	cout<<"multiply result:"<<endl;
	cout<<ans.mexp<<endl;
	for(i=0;i<=ans.mexp;i++)
		cout<<ans.arr[i]<<" ";
	cout<<endl;
}

int main()
{

    poly a,b,c;
	memset(a.arr,0,sizeof(a.arr));
	memset(b.arr,0,sizeof(b.arr));
	cout<<"多项式最高幂次"<<endl;
	cin>>a.mexp;
	int i=0;
	cout<<"多项式的各项系数(幂次数递增)"<<endl;
	for(;i<=a.mexp;i++)
		scanf("%d",&a.arr[i]);
	cout<<"多项式最高幂次"<<endl;
	cin>>b.mexp;
	cout<<"多项式的各项系数(幂次数递增)"<<endl;
	for(i=0;i<=b.mexp;i++)
		scanf("%d",&b.arr[i]);
	add(a,b,c);

	mul(a,b,c);

system("pause");
return 0;
}

2.多项式的系数存放在链表结点中

# include <iostream>
# include <cstdlib>
using namespace std;
struct node
{
int key;
int exp;
node *next;
};

node *create()
{
node *head=new node;
head->next=NULL;
node *s=head;
int x,y;
cout<<"请输入系数和次数(次数递增),以0 0结束"<<endl;
while(cin>>x>>y&&(x!=0||y!=0))
{
node *tmp=new node;
tmp->key=x;
tmp->exp=y;
tmp->next=NULL;
s->next=tmp;
s=tmp;
}
return head;
}

node *add(node *h1,node *h2)
{
	node *p=h1->next;
	node *q=h2->next;
node *s=h1;
node *cur=h1;
while(p&&q)
{
	if(p->exp==q->exp)
	{
		p->key=p->key+q->key;
		s->next=p;
		s=p;
		p=p->next;
		q=q->next;
	}
	else if(p->exp<q->exp)
	{
		s->next=p;
		s=p;
		p=p->next;
	}
	else
	{
		s->next=q;
		s=q;
		q=q->next;
	}
	if(s->key!=0)
	{
		cur->next=s;
		cur=s;
	}

}
if(p==NULL)
	p=q;
while(p)
{
	cur->next=p;
	p=p->next;
}
return h1;
}
void display(node *h)
{
	node *p=h->next;
	while(p)
	{
		cout<<p->key<<"*x^"<<p->exp<<" ";
		p=p->next;
	}
	cout<<endl;
}

int main()
{
	node *h1=create();
	node *h2=create();
	node *h=add(h1,h2);
	cout<<"相加结果:"<<endl;
	display(h);
system("pause");
return 0;
}

多项式的表示

时间: 2024-10-16 19:37:25

多项式的表示的相关文章

2017 ACM-ICPC 西安网络赛 F.Trig Function Chebyshev多项式

自己太菜,数学基础太差,这场比赛做的很糟糕.本来想吐槽出题人怎么都出很数学的题,现在回过头来想还是因为自己太垃圾,竞赛就是要多了解点东西. 找$f(cos(x))=cos(nx)$中$x^m$的系数模998244353. wolfram alpha查了这个函数无果,得到了一堆sinx和cosx以及一个复指数的方程,其实应该推个几项再用数列查询查查看的,然后就会知道是Chebyshev polynomials 查WIKI直接就有通项公式了.然后就比较简单的了. 连方程都看不出来就别想着推导公式了.

算法练习--多项式加法

JS 实现 多项式加法 Array.prototype.existKey = function(propVal){ var i = 0; for(var i = 0;i < this.length; i++){ if(this[i].k == propVal){return i;} } return -1; } function polynAdd(a,b){ //1. parse out each exp var strA = a[0] == '-' ? a : '+' + a; var str

棋盘的多米诺覆盖:Dimer Lattice Model,Pfaff 多项式,Kasteleyn 定理

这次来介绍计数组合学里面一个经典的问题:Dimer Lattice Model.问题是这样的:一个有 64 个方格的国际象棋棋盘,有多少种不同的多米诺骨牌覆盖?这里的覆盖是指不重复不遗漏地盖住整个棋盘. 下图是一种可能的覆盖方式(图片来自 Wiki 百科): 这个问题的答案是 12988816,非常大的一个数字,绝对不是一个一个数出来的.1961 年德国物理学家 Kasteleyn 借助于线性代数中的一个结论首先解决了这个问题,我们接下来就介绍他的方法. ~~~~~~~~~~~~~~~~~~~~

2017西安网络赛 计蒜客 Trig Function 切比雪夫多项式

http://www.docin.com/p-385138324.html 用以表示cosnx的关于cosx的多项式的通项公式 http://www.docin.com/p-232710665.html?docfrom=rrela 数列通项公式的求法(论文) 问答里说这个是切比雪夫多项式 我查了一下哇.. 第一类切比雪夫多项式 #include <stdio.h> #include <cstring> #include <iostream> #include <m

多项式艺术:浅谈FFT和NTT算法(未完待续)

什么是多项式? 百度百科说:“由若干个单项式相加组成的代数式叫做多项式.多项式中每个单项式叫做多项式的项,这些单项式中的最高次数,就是这个多项式的次数.” 也就是说,形如的式子,就叫做多项式.这样的式子,也能写作.很显然,多项式加上(或是减上)多项式也是多项式,复杂度是的.但是,如果多项式想要乘上一个多项式,那么也可以,最简单的方法却是的. 不过,FFT算法会告诉你,就够了. 多项式乘法 我们说的,多项式想要乘上一个多项式,那就是多项式乘法,人称“卷积”.我们方才所看到的,被称为多项式的“系数表

bzoj 3323: [Scoi2013]多项式的运算.

3323: [Scoi2013]多项式的运算 Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 412  Solved: 148[Submit][Status][Discuss] Description 某天,mzry1992 一边思考着一个项目问题一边在高速公路上骑着摩托车.一个光头踢了他一脚,摩托车损坏,而他也被送进校医院打吊针.现在该项目的截止日期将近,他不得不请你来帮助他完成这个项目.该项目的目的是维护一个动态的关于x 的无穷多项式F(x) =

[UOJ 0034] 多项式乘法

#34. 多项式乘法 统计 描述 提交 自定义测试 这是一道模板题. 给你两个多项式,请输出乘起来后的多项式. 输入格式 第一行两个整数 nn 和 mm,分别表示两个多项式的次数. 第二行 n+1n+1 个整数,分别表示第一个多项式的 00 到 nn 次项前的系数. 第三行 m+1m+1 个整数,分别表示第一个多项式的 00 到 mm 次项前的系数. 输出格式 一行 n+m+1n+m+1 个整数,分别表示乘起来后的多项式的 00 到 n+mn+m 次项前的系数. 样例一 input 1 2 1

1127: 零起点学算法34——继续求多项式

1127: 零起点学算法34--继续求多项式 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 3481  Accepted: 1985[Submit][Status][Web Board] Description 输入1个正整数n, 计算1+(1+2)+(1+2+3)+...+(1+2+3+...+n) Input 输入正整数n(多组数据) Output 输出1+(1+2)+(1+2+3)+...+

1128: 零起点学算法35——再求多项式(含浮点)

1128: 零起点学算法35--再求多项式(含浮点) Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 2141  Accepted: 1002[Submit][Status][Web Board] Description 输入一个整数n,计算 1+1/(1-3)+1/(1-3+5)+...+1/(1-3+5-...+2n-1)的值 Input 输入一个整数n(多组数据) Output 出1+1/(1

团体程序设计天梯赛 L2-018. 多项式A除以B(模拟)

题意:给你A,B两个多项式,问你A/B的值:注意多项式给你的是每个式子的指数与系数:保留到一位小数,如果出现系数为0(保留后也是)的情况,请不要输出它,如果没有非系数为0的情况就输出特殊 题解:多项式类似于"a*x^4+b*x^3+c*x^2+d*x^1+e*x^0"的形式,两个多项式除法就是模拟除法做 现在被除数最大指数的系数.被 除数最大指数的系数除以.结果就是商的系数,两个指数的差就是商的指数 然后枚举除数每一位乘以这个值来被 被除数减去,最后找被除数后一个位置继续循环,直到被除