Polynomial addition Operation using C++

//#include "stdafx.h" 
#include<iostream>
using namespace std;
#include<stdlib.h>
#include"stdio.h"
struct Term
{
int exp; //指数
double coef; //系数

};

struct Node

{

Term data; //结点内容,为TERM结构

struct Node *next;

};

template <typename T>

class Polynomial //多项式类

{

public:

Polynomial(Node* p) :front(p),n(0) //构造函数

{

p->data.coef=-1;

p->data.exp=-1;

p->next=NULL;

}

~Polynomial() { } //析构函数

void Print(); //显示

void Delete(Node *p); //销毁多项式值为0的项

int Getlength(); //获取多项式长度

void Setn();

void Getfront();

void Row(); //将多项式降序排序

T Power(T n, T x); //计算x^n,用于赋值

void Plus(Polynomial &B,Polynomial &R); //相加

void Minus(Polynomial &B,Polynomial &R); //相减

void Oppo(); //系数相反数,用于相减

void Evalute(double x); //赋值

void Derivate(Polynomial &R); //求导

void Multiply(Polynomial &B,Polynomial &R); //相乘

void destroyLink(); //销毁多项式

void menuPrint(); //菜单

void createLink(int n); //创建多项式

void Over(); //退出

int n;

double result;

private:

Node *front;

};

//计算x^n,用于赋值

template<class T>

T Polynomial<T>::Power(T n, T x)

{

double result=1;

for(int i=1;i<=n;i++)

result=result*x;

return result;

}
template<class T>

int Polynomial<T>::Getlength()

{

Node *p=front;

if (p == NULL)

return 0;

while(p->next!=NULL)

{

n++;

p=p->next;

}

return n;

}

//显示

template<class T>

void Polynomial<T>::Print()

{

Row();

if((front==NULL)||(front->next==NULL))

{

cout<<"一元多项式为空"<<endl;

}

else

{

Node *p=front->next;

if(p->data.exp!=0)

cout<<"Poly= "<<p->data.coef<<"x^"<<p->data.exp;

else if(p->data.exp==0)

cout<<"Poly= "<<p->data.coef;

if(p->next!=NULL)

{

p=p->next;

while(1)

{

if((p->data.coef<0)&&(p->data.exp!=0))

cout<<p->data.coef<<"x^"<<p->data.exp;

else if((p->data.coef>0)&&(p->data.exp!=0))

cout<<"+"<<p->data.coef<<"x^"<<p->data.exp;

else if((p->data.coef<0)&&(p->data.exp==0))

cout<<p->data.coef;

else if((p->data.coef>0)&&(p->data.exp==0))

cout<<"+"<<p->data.coef;

if(p->next!=NULL)

p=p->next;

else

break;

}

}

}

cout<<endl;

}

//销毁多项式值为0的项
template<class T>

void Polynomial<T>::destroyLink()

{

Node* a=front->next;

if(!a) throw "一元多项式已为空!";//抛出异常

while(1)

{

if(a->next)

{

Node* b=a;

a=a->next;

delete b;

}

else

{

delete a;

break;

}

}

front->next=NULL;

}
template<class T>

void Polynomial<T>::Delete(Node *p)

{

Node *q=front

;

while(q->next!=p)

q=q->next;

p=q;

q=q->next;

delete q;

}
template<class T>

void Polynomial<T>::createLink(int n)

{

if(front->next!=NULL)

{

destroyLink();

}

Node *a=front;

for(int i=1;i<=n;i++)

{

a->next=new Node;

a=a->next;

a->next=NULL;

cout<<"请输入第"<<i<<"项的系数和指数:"<<endl;

cout<<"系数:";

cin>>(a->data).coef;

cout<<"指数:";

cin>>(a->data).exp;

if(a->data.exp<0)

{

cout<<"您输入有误,指数不允许为负值!"<<endl;

Delete(a);

i--;

continue;

}

if(a->data.coef==0)

{

cout<<"系数为零,重新输入!"<<endl;

Delete(a);

i--;

continue;

}

}

}


template<class T>

void Polynomial<T>::Setn()

{

n=Getlength();

}

template<class T>

void Polynomial<T>::Getfront()

{

Node *front=new Node;

}

//将多项式降序排序与合并同类项

template<class T>

void Polynomial<T>::Row()

{

Node *p=front->next;

Node *q=front->next;

Node *t=front->next;

while(1) //冒泡排序

{

p=t;

q=p->next;

while(q)

{

if(p->data.exp>q->data.exp)

{

if(q->next)

q=q->next;

else

break;

}

else if(p->data.exp==q->data.exp) //合并同类项

{

p->data.coef=p->data.coef+q->data.coef;

Node *temp=front;

while(temp->next!=q)

temp=temp->next;

if(q->next)

{

q=temp;

temp=temp->next;

q->next=temp->next;

delete temp;

q=q->next;

}

else

{

q=temp;

temp=temp->next;

delete temp;

q->next=NULL;

break;

}

}

else

{

Node *temp = new Node;

temp->data=q->data;

q->data=p->data;

p->data=temp->data;

delete temp;

if(q->next)

q=q->next;

else

break;

}

}

if(t->next)

{

t=t->next;

}

else

break;

}

Setn();

}


template<class T>

void Polynomial<T>::Plus(Polynomial &B,Polynomial &R)

{

Node* a=front->next;

Node* b=B.front->next;

Node* r=R.front;

while(1)

{

r->next=new Node;

r=r->next;

r->next=NULL;

r->data=a->data;

if(a->next)

a=a->next;

else

break;

}

while(1)

{

r->next=new Node;

r=r->next;

r->next=NULL;

r->data=b->data;

if(b->next)

b=b->next;

else

break;

}

R.Row();

}


int main()

{

Node *p=new Node;

Node *q=new Node;

Node *r=new Node;

Polynomial<double> A(p); //操作多项式A

Polynomial<double> B(q); //操作多项式B

Polynomial<double> R(r); //操作多项式R(存储结果)

int m=0;

int n=0;



cout<<"请输入你要运算的第一个一元多项式的项数:"<<endl;

cin>>m;

A.createLink(m);

cout<<"请输入你要运算的第二个一元多项式的项数:"<<endl;

cin>>n;

B.createLink(n);



if(!m||!n)

{

cout<<"您的多项式创建有误,请重新选择……"<<endl; //异常(以下省略)


}

A.Plus(B,R);

cout<<"相加的两个一元多项式为:"<<endl;

A.Print();

B.Print();

cout<<"相加后的结果为:"<<endl;

R.Print();





}

C++中,我们可以使用结构体或类来表示多项式,并提供成员函数实现加法操作。下面是一个简单的例子,我们将创建`Polynomial`类,包含`coefficients`数组存储多项式的系数以及对应的次数(也称为指数): ```cpp #include <vector> class Polynomial { public: std::vector<int> coefficients; // 系数数组 int degree; // 最高次数 Polynomial() : degree(0) {} // 构造函数,用于添加常数项 Polynomial(int constant) { coefficients.push_back(constant); degree = 0; } // 添加两个多项式的系数,处理最高次数和合并系数 Polynomial operator+(const Polynomial& other) const { if (degree > other.degree) { Polynomial result(*this); for (int i = other.degree + 1; i <= result.degree; ++i) result.coefficients[i] += 0; // 补零 return result; } else if (degree < other.degree) { Polynomial result(other); for (int i = this->degree + 1; i <= result.degree; ++i) result.coefficients[i] += 0; // 补零 return result; } else { // 同等次数 Polynomial result; result.degree = degree; for (size_t i = 0; i <= degree; ++i) { result.coefficients[i] = coefficients[i] + other.coefficients[i]; } return result; } } private: // 其他辅助功能... }; // 使用示例 Polynomial p1(3); // 3x^0 Polynomial p2(4, 2); // 4x^2 Polynomial p3 = p1 + p2; // 实现加法并返回新多项式 ``` 在这个例子中,我们通过重载`+`运算符实现了两个`Polynomial`对象的相加。注意,这里假设输入的多项式是按降序排列(从最高的次数到最低的次数),以便于简单地比较它们的次数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值