【给将来学神的算法详解--高精】(1)(我的)高精度模板
2016-09-07 19:14
260 查看
这是关于高精度的所有文章的开头。。。
————————————华丽的分割线————————————
声明:这里只贴代码,并不解释,详解将在后来的文章给出。。。
本代码用了operator重定义,不会的就看其他的文章吧。。。
以后的文章代码将不会给出,要代码来这里
代码:
————————————华丽的分割线————————————
然后呢
然后就没了啊~~~
请期待下一篇文章
————————————华丽的分割线————————————
声明:这里只贴代码,并不解释,详解将在后来的文章给出。。。
本代码用了operator重定义,不会的就看其他的文章吧。。。
以后的文章代码将不会给出,要代码来这里
代码:
#include <cstdio> #include <cstdlib> #include <cmath> #include <iostream> #include <cstring> #include <ctime> #include <algorithm> #include <queue> #include <map> #define ci const int #define ri register int #define ll long long #define reg register #define boom return #define cmax(a,b) (a)>(b)?(a):(b) #define cmin(a,b) (a)<(b)?(a):(b) #define For(i,a,b) for(i=0;i<=n;i++) using namespace std; const int maxn=20001; struct bignum { int len,s[maxn]; bignum(){memset(s,0,sizeof(s)),len=1;} bignum(int num){*this=num;} bignum(const char* num){*this=num;} bool operator<(const bignum&b)const { if(len!=b.len)return len<b.len; for(int i=len-1;i>=0;i--) if(s[i]!=b.s[i])return s[i]<b.s[i]; return false; } bool operator>(const bignum&b)const{return b<*this;} bool operator>=(const bignum&b){return !(*this<b);} bool operator<=(const bignum&b){return !(b>*this);} bool operator==(const bignum&b){return !(b<*this)&&!(*this<b);} bignum operator=(int num) { char s[maxn]; sprintf(s,"%d",num); *this=s; return *this; } void clean(){while(len>1&&!s[len-1])len--;} bignum operator=(const char*num) { len=strlen(num); for(int i=0;i<len;i++)s[i]=num[len-i-1]-'0'; return *this; } bignum operator+(const bignum&a) { bignum c; c.len=max(len,a.len)+1; for(int i=0,x=0;i<c.len;++i) { c.s[i]=s[i]+a.s[i]+x; x=c.s[i]/10; c.s[i]=c.s[i]%10; } if(c.s[c.len-1]==0)--c.len; return c; } bignum operator+=(const bignum&b){*this=*this+b;return *this;} bignum operator*(const bignum&b) { bignum c; c.len=len+b.len; for(int i=0;i<len;i++) for(int j=0;j<b.len;j++) c.s[i+j]+=s[i]*b.s[j]; for(int i=0;i<c.len-1;i++) { c.s[i+1]+=c.s[i]/10; c.s[i]%=10; } c.clean(); return c; } bignum operator*=(const bignum&b){*this=*this*b;return *this;} bignum operator-(const bignum&b) { bignum c;c.len=0; for(int i=0,g=0;i<len;i++) { int x=s[i]-g; if(i<b.len)x-=b.s[i]; x>=0?g=0:(g=1,x+=10); c.s[c.len++]=x; } c.clean(); return c; } bignum operator-=(const bignum&b){*this=*this-b;return *this;} bignum operator/(const bignum&b) { bignum a=*this,c,b_; ri cnt,i,j,he; c.len=0; if(*this<b)c=0; else { for(i=b_.len=a.len,i--,j=b.len-1;j>=0;j--,i--)b_.s[i]=b.s[j]; while(a<b_)for(b_.len--,i=1;i<=b_.len;i++)b_.s[i-1]=b_.s[i];b_.s[b_.len]=0; while(1) { cnt=0; while(a>=b_)a-=b_,cnt++; c.s[c.len++]=cnt; if(b_==b)break; for(b_.len--,i=1;i<=b_.len;i++)b_.s[i-1]=b_.s[i];b_.s[b_.len]=0; } for(i=0,j=c.len-1;i<j;i++,j--)he=c.s[i],c.s[i]=c.s[j],c.s[j]=he; } return c; } bignum operator/(ci&b){bignum a=b;return *this/a;} bignum operator%(const bignum&b){return *this-(*this/b*b);} bignum operator%(ci&a){bignum b=a;return *this-(*this/b*b);} bignum operator/=(const bignum&b){*this=*this/b;return *this;} bignum operator%=(const bignum&b){*this=*this%b;return *this;} }; istream&operator>>(istream &in,bignum&x) { string s; in>>s; x=s.c_str(); return in; } ostream&operator<<(ostream &out,const bignum&x){for(int i=x.len-1;i>=0;--i)cout<<x.s[i];return out;}
————————————华丽的分割线————————————
然后呢
然后就没了啊~~~
请期待下一篇文章
相关文章推荐
- 【给将来学神的算法详解--高精】(8)“高级”高精度函数
- 【给将来学神的算法详解--高精】(2)高精的基础
- 【给将来学神的算法详解--高精】(4)对消与还原
- 朱、刘算法:求最小树形图权值个人理解+个人详解【最小树形图模板】
- 朱、刘算法:求最小树形图权值个人理解+个人详解【最小树形图模板】
- 后缀数组倍增算法模板详解
- rmq算法详解 模板
- 【给将来学神的算法详解--高精】(6)不可避免的时间复杂度
- 朱、刘算法:求最小树形图权值个人理解+个人详解【最小树形图模板】
- 【给将来学神的算法详解--数据结构】(1)栈
- bzoj2038 小Z的袜子【莫队算法模板+详解】
- Floyd(弗洛伊德)算法 详解+模板
- 【给将来学神的算法详解--高精】(3)A+B Problem
- 【给将来学神的算法详解--高精】(9)输入输出与总结
- Kruskal(克鲁斯卡尔) 最小生成树 算法详解+模板
- [模板] + [详解] - 二分图最大匹配 - 匈牙利算法
- POJ 3164 Command Network 最小树形图 (朱刘算法详解及模板)
- OpenCV模板匹配算法详解
- 【给将来学神的算法详解--高精】(7)大大小小&其他符号
- 进阶篇_STL详解(函数模板特化,类模板特化,用模板实现自己的通用算法)