多单项式与多项式相乘乘的运算则法

这是个机器人猖狂的时代,请输一下验证码,证明咱是正常人~您的位置: &
多项式乘除运算的简捷计算方法多项式类的C++实现(乘法、加法、代入求值) - 高山流水 - ITeye技术网站
博客分类:
一、数据结构设计:
多项式如何表示?这里采用这样的方法:只存储非零系数的项,并且指数递减排列。这样,将简化许多运算。
二、测试平台:VS2010
参考:《数据结构基础 2nd Edition》
程序代码如下:
#include &iostream&
#include&algorithm&
class Term{//多项式的每一项
class Polynomial{//多项式类
friend ostream & operator&&(ostream &o,const Polynomial & poly);
Polynomial();
Polynomial(const Polynomial & poly);
~Polynomial();
Polynomial operator+(const Polynomial & poly);//多项式加法
Polynomial operator*(const Polynomial & poly);//多项式乘法
float Eval(float x);//数x代入多项式求值
void NewTerm(float coef,int exp);//添加一项,若有相同的指数项,则合并
void insertTerm(const Term & term);//项的有序插入
Term *termA//非零系数项数组
//数组大小
//非零系数的项数
Polynomial::Polynomial()
this-&terms=0;
this-&capacity=10;
termArray=new Term[this-&capacity];
Polynomial::Polynomial(const Polynomial & b)
this-&terms=0;
this-&capacity=b.
termArray = new Term[this-&capacity];
for(int i=0;i&b.i++){
NewTerm(b.termArray[i].coef,b.termArray[i].exp);
Polynomial::~Polynomial()
delete [] termA
Polynomial Polynomial::operator+(const Polynomial & b)
int aPos=0;
int bPos=0;
while(aPos&terms && bPos&b.terms){
if(termArray[aPos].exp == b.termArray[bPos].exp){
float coef=termArray[aPos].coef+b.termArray[bPos].
if(coef)c.NewTerm(coef,termArray[aPos].exp);
aPos++;bPos++;
}else if(termArray[bPos].exp & b.termArray[bPos].exp){
c.NewTerm(b.termArray[bPos].coef,b.termArray[bPos].exp);
c.NewTerm(termArray[aPos].coef,termArray[aPos].exp);
while (aPos & terms){
c.NewTerm(termArray[aPos].coef,termArray[aPos].exp);
while (bPos & b.terms){
c.NewTerm(b.termArray[bPos].coef,b.termArray[bPos].exp);
Polynomial Polynomial::operator*(const Polynomial & b)
for(int i=0; i& i++){
for(int j=0; j&b. j++){
float coef = termArray[i].coef*b.termArray[j].
int exp = termArray[i].exp + b.termArray[j].
c.NewTerm(coef,exp);
void Polynomial::NewTerm(float coef, int exp)
if(terms == capacity){
capacity *= 2;
Term *tmp = new Term[capacity];
copy(termArray,termArray+terms,tmp);
delete [] termA
termArray =
ATerm.coef=ATerm.exp=
insertTerm(ATerm);
void Polynomial::insertTerm(const Term & term)
for(i=0; i&terms && term.exp&termArray[i]. i++){
if(term.exp == termArray[i].exp){
termArray[i].coef += term.
if(!termArray[i].coef){
for(int j=i; j&terms-1; j++)
termArray[j]= termArray[j+1];
for(int j=terms-1; j&=i;j--)
termArray[j+1]=termArray[j];
termArray[i] =
float Polynomial::Eval(float x)
float res=0.0;
for(int i=0;i& i++){
res += termArray[i].coef * pow(x,termArray[i].exp);
ostream & operator&&(ostream & o,const Polynomial & poly)
for(int i=0;i&poly.terms-1;i++){
o&&poly.termArray[i].coef&&"x^"&&poly.termArray[i].exp&&" + ";
o&&poly.termArray[poly.terms-1].coef&&"x^"&&poly.termArray[poly.terms-1].
void test()
Polynomial p1;
p1.NewTerm(3,2);
p1.NewTerm(2.1,3);
Polynomial p2;
p2.NewTerm(1,2);
p2.NewTerm(1,3);
p2.NewTerm(5,1);
cout&&"("&&p1&&") + ("&&p2&&") = "&&p1+p2&&
cout&&"F(x=2) = "&&(p1+p2).Eval(2)&&
cout&&"("&&p1&&") * ("&&p2&&") = "&&p1 * p2&&
int main()
system("Pause");
测试结果:
(2.1x^3 + 3x^2) + (1x^3 + 1x^2 + 5x^1) = 3.1x^3 + 4x^2 + 5x^1
F(x=2) = 50.8
(2.1x^3 + 3x^2) * (1x^3 + 1x^2 + 5x^1) = 2.1x^6 + 5.1x^5 + 13.5x^4 + 15x^3
请按任意键继续. . .
浏览 10333
浏览: 291582 次
来自: 南京
http://blog.mn886.net/chenjianh ...
非常受益。感谢分享。my blog:http://blog.m ...
不错,写的很详细,正需要esper的资料呢,谢谢。
不好意思!我是一菜鸟。没有看懂,能详细一些吗?...^_^您的位置: &
两个一元多项式相乘的快速算法}

我要回帖

更多关于 多项式与多项式相乘题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信