View Code
/*==================================================*\| 比较高效的大数| < , <= , + , - , * , / , %(修改/的最后一行可得)\*==================================================*/const int maxn = 1111; //最大长度const int base = 10000; //%04dstruct bint { int ln, v[maxn]; bint (int r) { memset(v,0,sizeof(v)); ln=0; if(r==0) {v[ln++]=0; return;} for(;r>0;r/=base) v[ln++]=r%base; } bint& operator=(const bint& r) { memcpy(this,&r,(r.ln+1)*sizeof(int)); return *this; } void out() { printf("%d",v[ln-1]);for(int i=ln-2;i>=0;i--) printf("%04d",v[i]);printf("\n"); }};bool operator<(const bint&a, const bint&b) { int i; if(a.ln!=b.ln) return a.ln=0 && a.v[i]==b.v[i];i--); return i<0?0:a.v[i] = 0; i--) { if(x.v[i]!=y.v[i]) return false; } return true;} bint operator+(const bint&a, const bint&b) { bint res(1); int i, cy=0; for(i=0;i 0;i++) { if(i 0 && res.v[res.ln-1]==0) res.ln--; return res;}bint operator*(const bint&a, const bint&b) { bint res(0); if(0==b.ln) return res; int i, j, cy; for(i=0; i 0; j++, cy/=base) { if(j = res.ln) res.v[res.ln++]=cy%base; else res.v[i+j]=cy%base; } } return res;}bint operator/(const bint&a,int b) { // ! b != 0 bint res(0), zero(0); int i, mod=0; res.ln = a.ln; for(i=a.ln-1; i>=0 ; i--) { mod=mod*base+a.v[i]; res.v[i]=mod/b; mod%=b; } while(res.ln>0 && res.v[res.ln-1]==0) res.ln--; if(res.ln==0) res=zero; return res; // return mod相当于对b取余}