打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
用线性表实现多项式的加法和乘法

 

15.用线性表实现多项式的加法和乘法

/*用线性表实现多项式的加法和乘法*/

 

 

#include<iostream>

#include<cstdlib>

#include<Vector>

#include<cmath>

using namespace std;

 

/*使用模板创建一个因子的结构*/

template<typename T>

struct Polynomia{

       T num;                         //num表示实系数;

       char ch;                       //ch表示未知数;

       int i;                         //i表示指数;

};

 

 

/*对加号的重载*/

template<typename T>

Polynomia<T> operator+(Polynomia<T> const& lhs,Polynomia<T> const& rhs)

{

       Polynomia<T> P1;

       if(lhs.ch==rhs.ch){

          P1.num=lhs.num+rhs.num;

              P1.ch=lhs.ch;

              if(lhs.i==rhs.i||lhs.i!=0){

                     P1.i=lhs.i;

              }

              else{

                     P1.i=rhs.i;

              }

       }

       return P1;

}

 

 

/*对乘号的重载*/

template<typename T>

Polynomia<T> operator*(Polynomia<T> const& lhs,Polynomia<T> const& rhs)

{

       Polynomia<T> P2;

       if(lhs.num==0||rhs.num==0){

              P2.num=0;

              P2.ch=lhs.ch;

              P2.i=0;

       }

       else{

          P2.num=lhs.num*rhs.num;

          P2.ch=lhs.ch;

          P2.i=lhs.i+rhs.i;

       }

       return P2;

}

 

 

/*找出最大指数*/

template<typename T1>

T1 max(T1 a,T1 b)

{

       if(a>=b) return a;

       else  return b;

}

 

typedef Polynomia<double> PP;

 

 

int main()

{

       double x;                                   //x存储实系数;

       char ch2,ch1,ch0;                           //ch0存储未知元,ch1存储括号,ch2存储运算符号;

       int a,count=0,Max=0;                        //Max存储最大指数;

       Polynomia<double> P,P0;                     //PP0存储因子;

       std::vector<PP> vector1,vector2,vector3;    //vector1,vector2,vector3分别存储参加运算的多项式

                                                   //和得出的结果;

       vector1.reserve(1000);

       vector2.reserve(1000);

       vector3.reserve(1000);                      //给线性表分配空间;

 

       P.num=0;

       P.ch='y';

       P.i=0;

       P0.num=0;

       P0.ch='y';

       P0.i=0;                                      //结构的初始化;                                    

   

       for(count=0;count<100;count++){              //向量的初始化;

              vector1.push_back(P);

              vector2.push_back(P);

              vector3.push_back(P);

       }

 

       cout<<"请输入多项式(形如(5y2+2y1)*(4y4+3y1)="<<endl;

       cout<<"注意括号不可少!"<<endl<<endl;

 

       cin>>ch1;

       while(ch1!='(') {cin>>ch1;}                 //以括号区分两个多项式,并存入向量;

       while(ch1!=')'){

              cin>>x>>ch0>>a;

              P.num=x;

              P.ch=ch0;

              P.i=a;

              vector1.operator[](a)=P;

              Max=max(Max,a);

              cin>>ch1;

       }

 

       cin>>ch2;                                      //第二个多项式;

       while(ch1!='(') {cin>>ch1;}

       while(ch1!=')'){  

              cin>>x>>ch0>>a;

              P.num=x;

              P.ch=ch0;

              P.i=a;           

              vector2.operator[](a)=P;     

              Max=max(Max,a);

              cin>>ch1;

       }

      

       if(ch2=='+'){                                //进行加法运算;

              for(count=0;count<=Max;count++){

                     vector3.operator[](count)=vector1.operator[](count)+vector2.operator[](count);

              }

       }

 

       if(ch2=='*'){                                  //进行乘法运算; 

              for(int count1=0;count1<=2*Max;count1++){

                     for(int count2=0;count2<=count1;count2++){

                            P0=P0+(vector1.operator[](count2)*vector2.operator[](count1-count2));

                     }

                     vector3.operator[](count1)=P0;

             

                     P0.num=0;

                     P0.ch='y';

                     P0.i=0;

              }

       }

 

    cout<<"结果为:";

       for(int m=0,n=0;m<=2*Max;m++){                 //控制输出;         

              if((vector3.operator[](m)).num!=0){

                     n==0?cout<<" ":cout<<"+";

                     n++;

                     cout<<(vector3.operator[](m)).num<<(vector3.operator[](m)).ch<<(vector3.operator[](m)).i;

              }

       }

       cout<<endl<<endl<<endl;

 

 

       return 0;

}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
1636 按照频率将数组升序排序
C++ vector 类学习笔记 - C/C++ - 在路上
用C++11优化矩阵运算的空间和时间效率
LilianChen C#:运算符重载
17 、unity3d Vector3
R语言有RStan的多维验证性因子分析(CFA)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服