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(T
{
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; //P,P0存储因子;
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;
联系客服