数据结构 P43 算法实现 两个一元多项式相乘

来源:互联网 发布:matlab求解矩阵方程组 编辑:程序博客网 时间:2024/05/22 02:29

/*程序*/

#include<iostream>

using namespace std;

struct node
{
int coefficient;                      //系数
int exponent; //指数
    node *next;
};

class polynomial                      //多项式
{
public:
int value;                             //value记录多项式的值
node  *head,*p,*s;               
public:
polynomial(){head=new node();} //构造函数
void InitPoly();                    //创建多项式
    void output();                     //打印多项式
int  count(int x);                 //计算多项式
};

void polynomial::InitPoly()
{       
     int x,y;                        //x记录该项的系数,y记录该项的指数
     p=head;
   while(1)
       {
s=new node();      //动态分配新的节点记录 项
           cout<<"coefficient: ";   
       cin>>x;
if(x==0)break;       //当输入系数为0时退出多项式创建函数
s->coefficient=x;  
cout<<"exponent: ";
cin>>y;
       s->exponent=y;
p->next=s;
p=p->next;  
 }
cout<<endl;
}

void polynomial::output()     

cout<<"多项式为:";
for(p=head;p!=NULL;p=p->next)
if(p->coefficient!=0)         //该项系数为0则不打印该项
{cout<<p->coefficient<<"*x^"<<p->exponent<<" ";}
cout<<endl;
}

int polynomial::count(int x)
{
 int v=1;
 value=0;
 for (p=head;p!=NULL;p=p->next)
 {
 for(int j=0;j<p->exponent;++j)
              v*=x;
 value+=p->coefficient*v;   //将每项的值累加起来
 v=1;
 }
 return value;                         //返回该多项式的值
}

void MultPol(polynomial A,polynomial B,polynomial C);

int main( )
{
polynomial A, B, C;
int x,v;          
node *p;

A.InitPoly();
A.output();

B.InitPoly();
    B.output();

MultPol(A,B,C);
    C.output();
/*以下为验证乘法结果的程序段*/
cin>>x;
v=A.count(x);
cout<<v<<" ";
v=B.count(x);
cout<<v<<" ";
v=C.count(x);
cout<<v<<" ";
/*****************************/
while (1){}
return 0;
}

void MultPol(polynomial A,polynomial B,polynomial C)   //多项式乘法:C=A*B
{   
node *pa,*pb,*pc,*temp;  //定义三个指针分别指向A B C三个多项式

    pc=C.head;                  
for(pa=A.head;pa!=NULL;pa=pa->next) //将A多项式的每项与B多项式的每项依次相乘赋给C多项式
for(pb=B.head;pb!=NULL;pb=pb->next)
{
temp=new node();
temp->coefficient=pa->coefficient*pb->coefficient;
temp->exponent=pa->exponent+pb->exponent;
pc->next=temp;
pc=pc->next;
}

}

————————————————————————————————————————————————

/*多项式相乘算法*/

void MultPol(polynomial A,polynomial B,polynomial C)   //多项式乘法:C=A*B
{   
node *pa,*pb,*pc,*temp;  //定义三个指针分别指向A B C三个多项式

    pc=C.head;                  
for(pa=A.head;pa!=NULL;pa=pa->next) //将A多项式的每项与B多项式的每项依次相乘赋给C多项式
for(pb=B.head;pb!=NULL;pb=pb->next)
{
temp=new node();
temp->coefficient=pa->coefficient*pb->coefficient;
temp->exponent=pa->exponent+pb->exponent;
pc->next=temp;
pc=pc->next;
}

}


原创粉丝点击