一元稀疏多项式计算器加减乘除运算_第1页
一元稀疏多项式计算器加减乘除运算_第2页
一元稀疏多项式计算器加减乘除运算_第3页
一元稀疏多项式计算器加减乘除运算_第4页
一元稀疏多项式计算器加减乘除运算_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、山东大学14级计算机科学与技术学院,王士彬#include#include#include #includeusing namespace std;class termpublic:term(int c=0,int e=0):coef(c),exp(e)int coef;/系数 int exp;/指数 ;class Polynomialprivate:int degree;/阶数 list termList;/存储多项式 public:Polynomial()degree=0;/-构造函数,创造一个0阶多项式 int Degree();/-求多项式的阶数 double Value(double

2、 x);/-返回多项式在x下的值 void Clear();/-清空多项式 Polynomial shunxu();/-指数递增变递减,递减变递增 Polynomial paixu();/-用来对计算后结果的排序处理 (主要去掉系数为0的项)/*函数方法 */ void Input();/-多项式输入 void OutPut();/-多项式输出 Polynomial Add(Polynomial &b);/-多项式相加 Polynomial Subtract(Polynomial &b);/-多项式相减 Polynomial Multiply(Polynomial &b);/-多项式相乘 Po

3、lynomial Divide(Polynomial &b); /-多项式相除 /* 操作符重载 */ friend istream& operator(istream &is,Polynomial &obj);/-输入符号重载 friend ostream& operator(ostream &os,Polynomial &obj);/-输出符号重载 Polynomial operator+(Polynomial &b);/-加号重载 Polynomial operator-(Polynomial &b);/-减号重载 Polynomial operator*(Polynomial &b);

4、/-乘号重载 Polynomial operator/(Polynomial &b);/-除号重载 ; int Polynomial:Degree()list:iterator iter=termList.begin();term temp=(term)*iter; int degree=temp.exp; return degree;double Polynomial:Value(double x)double sum=0;int i;list:iterator iter=termList.begin();for(;iter!=termList.end();iter+)term temp=(

5、term)*iter;int t=1;for(i=temp.exp;i!=0;i-)t=t*x; sum+=temp.coef*t;return sum;void Polynomial:Clear()termList.clear();Polynomial Polynomial:shunxu()Polynomial p1;list:iterator iter=termList.begin();for(;iter!=termList.end();iter+)term temp;term t_a=(term)*iter;temp.coef=t_a.coef;temp.exp=t_a.exp;p1.t

6、ermList.push_front(temp);return p1;/用来对计算后结果的排序处理 (在输入时已经对系数为0的情况处理过了,但得出的结果系数可能有等于0的,此方法就是对系数为0的情况处理) Polynomial Polynomial:paixu()Polynomial aaa;list:iterator it =termList.begin();for(;it!=termList.end();)term t11=*it;if(t11.coef=0)it+;elseaaa.termList.push_back(t11);it+;return aaa;void Polynomial

7、:Input()int n;coutn;cout按升幂输入多项式的系数和指数endl;for(int i=1;i=n;i+)term t_temp;cout请输入第it_temp.coef;cint_temp.exp;if(t_temp.coef!=0)termList.push_back(t_temp); void Polynomial:OutPut()if(termList.empty()cout0;elselist:iterator it = termList.begin();for(;it!=termList.end();)term t11=*it;if(t11.exp!=0)if(t

8、11.coef=1)if(t11.exp=1)cout0)cout+;else cout;else coutx0)cout+;else cout;else if(t11.coef=(-1)if(t11.exp=1) cout0)cout+;else cout; else cout-x0)cout+;else cout; elseif(t11.exp=1)coutt11.coef0)cout+;else cout;elsecoutt11.coefx0)cout+;else cout;elsecout0)cout+;else cout; Polynomial Polynomial:Add(Poly

9、nomial &b)Polynomial c;list:iterator iter_a=termList.begin();list:iterator iter_b=b.termList.begin();while(iter_a!=termList.end()&iter_b!=b.termList.end()term t_temp;term t_a=(term)*iter_a;term t_b=(term)*iter_b;if(t_a.expt_b.exp)c.termList.push_back(t_a);iter_a+;elset_temp.coef=t_a.coef+t_b.coef;t_

10、temp.exp=t_a.exp;c.termList.push_back(t_temp);iter_a+;iter_b+;for(;iter_a!=termList.end();iter_a+)c.termList.push_back(*iter_a);for(;iter_b!=b.termList.end();iter_b+)c.termList.push_back(*iter_b);Polynomial c1=c.paixu();return c1;Polynomial Polynomial:Subtract(Polynomial &b)Polynomial c;list:iterato

11、r iter_a=termList.begin();list:iterator iter_b=b.termList.begin();while(iter_a!=termList.end()&iter_b!=b.termList.end()term temp;term t_a=(term)*iter_a;term t_b=(term)*iter_b;if(t_a.expt_b.exp)c.termList.push_back(t_a);iter_a+;else if(t_a.expt_b.exp)temp.coef=-t_b.coef;temp.exp=t_b.exp;c.termList.pu

12、sh_back(temp);iter_b+;elsetemp.coef=t_a.coef-t_b.coef;temp.exp=t_a.exp;c.termList.push_back(temp);iter_a+;iter_b+;for(;iter_a!=termList.end();iter_a+)c.termList.push_back(*iter_a);for(;iter_b!=b.termList.end();iter_b+)term temp2;term t_b=(term)*iter_b;temp2.coef=-t_b.coef;temp2.exp=t_b.exp;c.termLis

13、t.push_back(temp2);Polynomial c1=c.paixu();return c1;Polynomial Polynomial:Multiply(Polynomial &b)Polynomial c;list:iterator iter_a=termList.begin();for(;iter_a!=termList.end();iter_a+)Polynomial c1;/这个 c1的位置只能放在这里,局部变量 list:iterator iter_b=b.termList.begin();for(;iter_b!=b.termList.end();iter_b+)te

14、rm temp;term t_a=(term)*iter_a;term t_b=(term)*iter_b;temp.coef=t_a.coef*t_b.coef;temp.exp=t_a.exp+t_b.exp;c1.termList.push_back(temp);c=c.Add(c1);c1.Clear();return c; Polynomial Polynomial:Divide(Polynomial &b)Polynomial a;/被除数 list:iterator iter_a=termList.begin();for(;iter_a!=termList.end();iter_

15、a+)term temp;term t_a=(term)*iter_a;temp.coef=t_a.coef;temp.exp=t_a.exp; a.termList.push_back(temp); /-Polynomial quotient,remainder,temp1,temp2;list:iterator qa_a=a.termList.begin();list:iterator qb_b=b.termList.begin(); term qa=(term)*qa_a;term qb=(term)*qb_b;temp1=a;/cout要到达while循环了=qb.exp)term t

16、emp2_term;temp2_term.coef=qa.coef/qb.coef;temp2_term.exp=qa.exp-qb.exp;quotient.termList.push_back(temp2_term);Polynomial center_quotient;center_quotient.termList.push_back(temp2_term);Polynomial tt=b*center_quotient;a=a-tt;a=a.paixu();list:iterator qa_1=a.termList.begin(); qa=(term)*qa_1; Polynomia

17、l ji=quotient*b; / Polynomial remainder =temp1-ji; return remainder; istream &operator(istream &is,Polynomial &obj)int n;coutn;cout按升幂输入多项式的系数和指数endl;for(int i=1;i=n;i+)term t_temp;cout请输入第it_temp.coef;cint_temp.exp;if(t_temp.coef!=0)obj.termList.push_back(t_temp); return is;ostream& operator(ostrea

18、m &os,Polynomial &obj)if(obj.termList.empty()cout0;elselist:iterator it = obj.termList.begin();for(;it!=obj.termList.end();)term t11=*it;if(t11.exp!=0)if(t11.coef=1)if(t11.exp=1)cout0)cout+;else cout;else coutx0)cout+;else cout;else if(t11.coef=(-1)if(t11.exp=1) cout0)cout+;else cout; else cout-x0)c

19、out+;else cout; elseif(t11.exp=1)coutt11.coef0)cout+;else cout;elsecoutt11.coefx0)cout+;else cout;elsecout0)cout+;else cout; return os;Polynomial Polynomial:operator+(Polynomial &b)Polynomial c;list:iterator iter_a=termList.begin();list:iterator iter_b=b.termList.begin();while(iter_a!=termList.end()

20、&iter_b!=b.termList.end()term t_temp;term t_a=(term)*iter_a;term t_b=(term)*iter_b;if(t_a.expt_b.exp)c.termList.push_back(t_a);iter_a+;elset_temp.coef=t_a.coef+t_b.coef;t_temp.exp=t_a.exp;c.termList.push_back(t_temp);iter_a+;iter_b+;for(;iter_a!=termList.end();iter_a+)c.termList.push_back(*iter_a);f

21、or(;iter_b!=b.termList.end();iter_b+)c.termList.push_back(*iter_b);Polynomial c1=c.paixu();return c1;Polynomial Polynomial:operator-(Polynomial &b)Polynomial c;list:iterator iter_a=termList.begin();list:iterator iter_b=b.termList.begin();while(iter_a!=termList.end()&iter_b!=b.termList.end()term temp

22、;term t_a=(term)*iter_a;term t_b=(term)*iter_b;if(t_a.expt_b.exp)c.termList.push_back(t_a);iter_a+;else if(t_a.expt_b.exp)temp.coef=-t_b.coef;temp.exp=t_b.exp;c.termList.push_back(temp);iter_b+;elsetemp.coef=t_a.coef-t_b.coef;temp.exp=t_a.exp;c.termList.push_back(temp);iter_a+;iter_b+;for(;iter_a!=t

23、ermList.end();iter_a+)c.termList.push_back(*iter_a);for(;iter_b!=b.termList.end();iter_b+)term temp2;term t_b=(term)*iter_b;temp2.coef=-t_b.coef;temp2.exp=t_b.exp;c.termList.push_back(temp2);Polynomial c1=c.paixu();return c1;Polynomial Polynomial:operator*(Polynomial &b)Polynomial c;list:iterator it

24、er_a=termList.begin();for(;iter_a!=termList.end();iter_a+)Polynomial c1;/这个 c1的位置只能放在这里,局部变量 list:iterator iter_b=b.termList.begin();for(;iter_b!=b.termList.end();iter_b+)term temp;term t_a=(term)*iter_a;term t_b=(term)*iter_b;temp.coef=t_a.coef*t_b.coef;temp.exp=t_a.exp+t_b.exp;c1.termList.push_bac

25、k(temp);c=c+c1;return c;Polynomial Polynomial:operator/(Polynomial &b)Polynomial a;/被除数 list:iterator iter_a=termList.begin();for(;iter_a!=termList.end();iter_a+)term temp;term t_a=(term)*iter_a;temp.coef=t_a.coef;temp.exp=t_a.exp; a.termList.push_back(temp); /-Polynomial quotient,remainder,temp1,te

26、mp2;list:iterator qa_a=a.termList.begin();list:iterator qb_b=b.termList.begin(); term qa=(term)*qa_a;term qb=(term)*qb_b;temp1=a;/cout要到达while循环了=qb.exp)term temp2_term;temp2_term.coef=qa.coef/qb.coef;temp2_term.exp=qa.exp-qb.exp;quotient.termList.push_back(temp2_term);Polynomial center_quotient;cen

27、ter_quotient.termList.push_back(temp2_term);Polynomial tt=b*center_quotient;a=a-tt;a=a.paixu();list:iterator qa_1=a.termList.begin(); qa=(term)*qa_1; /cout一直在while循环里endl; / cout出while循环了endl; Polynomial ji=quotient*b; remainder =temp1-ji; return quotient;int main() time_t t; time(&t); coutendl; cou

28、t 欢迎使用一元稀疏多项式计算器 endl;/ cout 功能:多项式的加,减,乘,除及按x求值 王 士 彬 endl; cout 输入:多项式的项数,系数,指数 2014级计算机学院endl; cout 各种运算后的结果 endl; cout-运行时间:ctime(&t)endl; cout 【功能选择项】endl; cout endl; cout 1,输入多项式A和B 2,计算多项式A+B endl; cout 3,计算多项式A-B 4,计算多项式A*B endl; cout 5,计算多项式A/B 6,计算A在x处的值 endl; cout 7,计算多项式A的阶数 8,退出 endl; c

29、out endl;int i;Polynomial p1,p2,p3,p4,p5,p6,p7;Polynomial p1_1;Polynomial p2_2; couti;while(i!=1)cout请先建立多项式A和Bendl; couti; doswitch(i)case 1:p1.Clear();p2.Clear();p1_1.Clear();p2_2.Clear(); coutp1; coutp2; p1_1=p1.shunxu();/降幂 p2_2=p2.shunxu();/降幂 cout多项式A为:p1_1endl;cout多项式B为:p2_2endl; cout-1输入AB 2加 3减 4乘 5除 6求值 7求阶数 8退出endl;couti; if(i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论