多项式的加法和乘法算术运算的C++实现
来源:互联网 发布:南瑞科技 知乎 编辑:程序博客网 时间:2024/06/07 06:22
数据结构第一部分实验后半段,实现多项式的加法和乘法,其中乘法部分难度更大。这个源码继承了部分上个实验的类,属于线性表的基本运算的拓展应用
Term.h:
#include <iostream.h>#include <string>class Term{public: Term(int c,int e); Term(int c,int e,Term* nxt); Term* insertafter(int c,int e); int coef; int exp; Term *link;private: friend ostream &operator<<(ostream &,const Term &); friend class Polynominal;};Term::Term(int c,int e){ coef=c; exp=e; link=NULL;}Term::Term(int c,int e,Term* nxt){ coef=c; exp=e; link=nxt;}Term* Term::insertafter(int c,int e){ link=new Term(c,e,link); return link;}ostream &operator<<(ostream & out,const Term &val){ if(val.coef==0) return out; out<<val.coef; switch(val.exp) { case 0: break; case 1: out<<"X"; break; default: out<<"X^"<<val.exp; break; } return out;}
Polynominal.h:
#include "Term.h"#include <string>class Polynominal{ private: Term *thelist; friend ostream & operator<<(ostream &,const Polynominal &); friend istream& operator>>(istream &,Polynominal &); friend Polynominal& operator +(Polynominal &,Polynominal &); friend Polynominal& operator *(Polynominal &,Polynominal &); public: Polynominal(); ~Polynominal(); void addterms(istream& in); void addterms(int c,int e); void padd(Polynominal & r); void padd(int c,int e); void pimul(Polynominal & r); void output(ostream &out)const;};Polynominal::Polynominal(){ thelist=new Term(0,-1); thelist->link=thelist;}Polynominal::~Polynominal(){ Term* p=thelist->link; while(p!=thelist) { thelist->link=p->link; delete p; p=thelist->link; }}void Polynominal::addterms(istream& in){ Term* q=thelist; int c,e; for(;;) { cout<<"input a term(coef,exp):\n"<<endl; cin>>c>>e; if(e<0) break; q=q->insertafter(c,e); }}void Polynominal::addterms(int c,int e){ if(e<0) return; Term *q=new Term(0,-1); Term *p=thelist; q->coef=c; q->exp=e; q->link=thelist; while(p->link->exp>0) { p=p->link; } p->link=q;}void Polynominal::output(ostream &out)const{ int first=1; Term *p=thelist->link; cout<<"the polynominal is:\n"<<endl; for(;p!=thelist;p=p->link) { if(!first && (p->coef>0)) cout<<"+"; first=0; cout<<*p; } cout<<"\n"<<endl;}void Polynominal::padd(Polynominal &r) //要求输入的多项式必须是从大到小排好的{ Term *q,*q1=thelist,*p; p=r.thelist->link; q=q1->link; while (p->exp>=0) //遍历r { while(p->exp<q->exp) //跳过q->exp大的项 { q1=q; q=q->link; } if(p->exp==q->exp) //合并多项式 { q->coef=q->coef+p->coef; if(q->coef==0) //相加等于0的处理 { q1->link=q->link; delete(q); q=q1->link; } else { q1=q; q=q->link; } } else //添加新项 { q1=q1->insertafter(p->coef,p->exp); } p=p->link; } cout<<"1";}void Polynominal::padd(int c,int e){ Term *q,*q1=thelist; q=q1->link; while(e<q->exp) //跳过q->exp大的项 { q1=q; q=q->link; } if(e==q->exp) //合并多项式 { q->coef=q->coef+c; if(q->coef==0) //相加等于0的处理 { q1->link=q->link; delete(q); q=q1->link; } } else //添加新项 { q1=q1->insertafter(c,e); } }void Polynominal::pimul(Polynominal &r){ Polynominal *a=this; Term *p,*q; p=thelist->link; //p=左第一个 q=r.thelist->link; //q=右第一个 Polynominal n; while(p->exp>=0) { while(q->exp>=0) //死循环了 { n.padd(p->coef*q->coef,p->exp+q->exp); q=q->link; } q=r.thelist->link; p=p->link; } Term *np=n.thelist->link; //以下为向this循环赋值 thelist->link->coef=0; thelist->link->exp=-1; thelist->link->link=thelist; while(np->exp>=0) { a->addterms(np->coef,np->exp); np=np->link; } a->addterms(0,-1);}
main.cpp:
#include "Polynominal.h"void main(){ Polynominal p,q,a; cout<<"Next is for yourself...."<<endl; cin>>p; cout<<p; cin>>q; cout<<q; q=q+p; cout<<q; cin>>a; cout<<a; q=q*a; cout<<q;}
阅读全文
0 0
- 多项式的加法和乘法算术运算的C++实现
- 一元多项式的加法和乘法运算
- 多项式的加法乘法实现
- 多项式的加法和乘法
- PAT 3-04 一元多项式的乘法与加法运算(C语言实现)
- 一元多项式的乘法与加法运算
- 一元多项式的乘法与加法运算
- 一元多项式的乘法与加法运算
- 一元多项式的加法与乘法运算
- 一元多项式的乘法与加法运算
- 一元多项式的乘法与加法运算
- 一元多项式的乘法与加法运算
- 一元多项式的乘法与加法运算
- 一元多项式的乘法与加法运算
- 一元多项式的加法和乘法运算(Java实现)——浙大数据结构(陈越)
- 链表实现多项式的加法和乘法
- 链表实现多项式的加法和乘法
- 多项式的加法与乘法(C++实现)
- 遍历注册表得到所有USB驱动
- java项目中发送邮件的整体流程
- The Worm Turns
- Latex数学符号使用大全
- %2d、%2u输出格式含义
- 多项式的加法和乘法算术运算的C++实现
- 逃跑的拉尔夫(将深搜进行到底!!!)
- 独木舟上的旅行
- Leetcode87. Scramble String
- diff: /Podfile.lock: No such file or directory
- C语言结构体占用空间内存大小解析
- 人脸识别活体检测技术
- 配置spring-aop
- 如何搜索网易云中的评论