《大整数除法》word版.doc_第1页
《大整数除法》word版.doc_第2页
《大整数除法》word版.doc_第3页
《大整数除法》word版.doc_第4页
《大整数除法》word版.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

大整数除法.txt我不奢望什么,只希望你以后的女人一个不如一个。真怀念小时候啊,天热的时候我也可以像男人一样光膀子!#include#includeusing namespace std;const int maxsize=1000;class Cbigint.private: char m_intmaxsize; int length;public: Cbigint(char *p=NULL); Cbigint(const Cbigint &c); Cbigint:Cbigint(long n); void sinmult(int offset,char str1,const char *str2,int n,char *dest);/一位乘法,供多位乘法调用 void mult(const char *str1,const char *str2,int n1,int n2,char *dest);/乘法实现主程序 void sub(const char *str1,int n1,const char *str2,int n2,char *dest);/减法实现主程序 void sum(const char *str1,int n1,const char *str2,int n2,char *dest);/加法实现主程序 Cbigint abs()const;/返回绝对值 friend ostream&operator(istream &dirt,Cbigint &iv);/输入 Cbigint Cbigint:operator =(Cbigint n);/重载等号 bool operator(const Cbigint &n); bool operator(const Cbigint &n); bool operator=(const Cbigint &n); Cbigint operator-(const Cbigint &n); Cbigint operator-(long n); Cbigint operator-()const;/重载负号 Cbigint operator+(const Cbigint &n); Cbigint operator+(long n); Cbigint operator*(long n); Cbigint operator*(const Cbigint &n); Cbigint operator/(long n); Cbigint operator/(const Cbigint &n); string toString();/转化为字条串 void init(char *p);/用字串初始化;/bigint.cpp#include bigint.hCbigint:Cbigint(char *p). if(p=NULL) . for(int i=1;imaxsize-1;i+) m_inti=0; m_int0=+; length=1; else . length=strlen(p); int i=0; if(p0!=-) . for(i=1;i=length;i+) m_inti=pi-1-48; m_int0=+; else . for(i=1;ilength;i+) m_inti=pi-48; m_int0=-; length-; for(i;i=0) m_int0=+; else m_int0=-;void Cbigint:init(char *p). length=strlen(p); int i=1; if(p0!=-) . for(i=1;i=length;i+) m_inti=pi-1-48; m_int0=+; else . for(i=1;i=length;i+) m_inti=pi-48; m_int0=-; length-; for(i;imaxsize;i+) m_inti=0;Cbigint:Cbigint(const Cbigint &c). for(int i=0;i=c.length;i+) m_inti=c.m_inti; length=c.length;string Cbigint:toString() string str(length+1,0); if(m_int0=+) for(int j=0;jlength;j+) strj=m_intj+1+48; else for(int j=1;j=0) x=str2i*str1+inc+destoffset; destoffset=x%10; inc=x/10; i-; offset+; while(inc) x=destoffset+inc; destoffset=x%10; inc=x/10; offset+; void Cbigint:mult(const char *str1,const char *str2,int n1,int n2,char *dest) int i=n1-1; while(i=0) sinmult(n1-i-1,str1i,str2,n2,dest); i-; Cbigint Cbigint:operator *(const Cbigint &n) Cbigint temp; char destmaxsize=0; int i=0,j=0; mult(m_int+1,n.m_int+1,length,n.length,dest); for(i=maxsize-1;i=0;i-) if(desti!=0) break; temp.length=i+1; for(j=0;j=i;j+) temp.m_intj+1=desti-j; if(m_int0!=n.m_int0) temp.m_int0=-; else temp.m_int0=+; return temp;Cbigint Cbigint:operator /(const Cbigint &n) Cbigint div1=abs(),div2=n.abs(),result; int flag=0; if(m_int0=n.m_int0) flag=+; else flag=-; if(div1div2) result.m_int0=+; result.m_int1=0; result.length=1; return result; result.m_int0=flag; if(div1=div2) result.m_int0=flag; result.m_int1=1; result.length=1; return result; int len1=div1.length,len2=div2.length,len3,temp=0; int i=1; for(i=1;idiv2.m_inti) result.length=len1-len2+1; break; if(div1.m_intilen2) result.length=len1-len2+1; len3=result.length; while(div1div2|div1=div2) for(i=1;idiv2.m_inti) temp=len1-len2+1; break; if(div1.m_intilen2) temp=len1-len2+1; result.m_intlen3-temp+1=result.m_intlen3-temp+1+1; div2.length=div2.length+temp-1; div1=div1-div2; div2.length=len2; len1=div1.length; return result;Cbigint Cbigint:operator /(long n) return (*this)/Cbigint(n);Cbigint Cbigint:operator =(const Cbigint n) for(int i=0;i=n.length;i+) m_inti=n.m_inti; for(int i=n.length+1;i(const Cbigint &n) if(m_int0n.m_int0) return true; if(m_int0n.length) return true; if(lengthn.length) return false; for(int i=1;in.m_inti) return true; if(m_intin.length) return false; if(lengthn.length) return true; for(int i=1;in.m_inti) return false; if(m_intin.m_inti) return true; return false; bool Cbigint:operator=(const Cbigint &n) if(length!=n.length) return false; for(int i=0;i=length;i+) if(m_inti!=n.m_inti) return false; return true;bool Cbigint:operatorn|*this=n) return false; else return true;Cbigint Cbigint:operator +(const Cbigint &n) Cbigint temp; char destmaxsize=0; char flag=+; int i=0; if(m_int0=n.m_int0) flag=m_int0; if(*thisn.abs() flag=m_int0; sub(m_int+1,length,n.m_int+1,n.length,dest); else flag=n.m_int0; sub(n.m_int+1,n.length,m_int+1,length,dest); for(i=maxsize-1;i=0;i-) if(desti!=0) break; for(int j=0;j0) n2-; x=str1n1+str2n2+inc; destm+=x%10; inc=x/10; while(n2-0) x=str2n2+inc; destm+=x%10; inc=x/10; destm=inc; Cbigint Cbigint:operator -()const Cbigint temp=*this; if(temp.m_int0=+) temp.m_int0=-; else temp.m_int0=+; return temp;void Cbigint:sub(const char *str1,int n1,const char *str2,int n2,char *dest) int m=0,x=0,inc=0; m=0; while(n2-0) n1-; x=str1n1-str2n2-inc; if(x0) x=str1n1-inc; if(x0

温馨提示

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

评论

0/150

提交评论