高精度四则运算(万进制)C++

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

压位高精(万进制)

//头文件:thp.h

#ifndef _cstring_

#define _cstring_

#include

#endif

#ifndef _cstdlib_

#define _cstdlib_

#include

#endif

const int THP_MAXLEN=1000;

const int THP_MAXSTRLEN=4040;

const int L0=10000;

class thp

{

friend const thp operator-(const thp&,const thp&);

friend const thp operator+(const thp&,const thp&);

friend const thp operator*(const thp&,const thp&);

friend const thp operator/(const thp&,const thp&);

friend void thpdiv(const thp&,const thp&,thp&,thp&);

friend const thp operator%(const thp&,const thp&);

public:

const thp& operator=(const thp&);

const thp& operator=(const char*);

bool operator==(const thp&)const;

bool operator>=(const thp&)const;

bool operator<=(const thp&)const;

inline bool operator!=(const thp&)const;

bool operator>(const thp&)const;

bool operator<(const thp&)const;

inline void shl(const int);

const thp& operator ++ ();

inline void makeempty();

const char *tostr()const;

inline thp& operator-=(const thp&);

thp();

thp(const char*);

const int thpstd();

protected:

int _data[THP_MAXLEN],_high,_sign;

private:

};

// 源代码 thp.cpp

#include "thp.h"

const int thp::thpstd()

{ int i;

for(i=0;i<=_high;i++)

{ while(_data[i]<0)

{ _data[i]+=L0;

_data[i+1]--;

}

}

return(0);

}

const thp operator % (const thp &a,const thp &b) { thp re1,re2;

thpdiv(a,b,re1,re2);

return(re2);

}

const thp& thp::operator ++ ()

{ _data[0]++;

if(_data[0]>=L0)this->thpstd();

return(*this);

}

void thp::shl(const int n)

{ int i;

for(i=_high;i>=0;i--)

{ _data[i+n]=_data[i];

}

_high+=n;

if(_data[_high]==0)_high=0;

}

thp& thp::operator -= (const thp &o)

{ int tint,i,len;

for(i=0;i<=_high;i++)

{ tint=_data[i]-o._data[i];

if(tint<0)

{ tint+=L0;

_data[i+1]--;

}

_data[i]=tint;

}

for(len=this->_high;len>=0;len--)

{ if(_data[len]!=0)break;

if(len==0)break;

}

_high=len;

return(*this);

}

void thpdiv(const thp &a,const thp &b,thp &c,thp &d) { int i;

d.makeempty();

c.makeempty();

for(i=a._high;i>=0;i--)

{ d.shl(1);

d._data[0]=a._data[i];

while(b<=d)

{ d-=b;

c._data[i]++;

}

if(i==0)break;

}

c._high=0;

for(i=a._high;i>0;i--)

{ if(c._data[i]!=0)

相关文档
最新文档