1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
| const int MAXL=1e3; struct Int { int len,z[MAXL]; Int() {memset(z,0,sizeof(z));len=1;} void clean_pre_zero() {while(len>1&&!z[len-1])len--;} void read() {char s[MAXL];scanf("%s",s);*this=s;} void print() {for(int i=len-1;i>=0;i--)printf("%d",z[i]);} Int operator=(const char *num) { len=strlen(num); for(int i=0;i<len;i++) z[i]=num[len-i-1]-'0'; return *this; } Int operator=(const int &num) { char s[MAXL]; sprintf(s,"%d",num); return *this=s; } Int(const int num) {*this=num;} Int(const char *num) {*this=num;} Int operator+(const Int &b) { Int res; res.len=max(len,b.len)+1; for(int i=0;i<res.len;i++) res.z[i]=z[i]+b.z[i]; for(int i=0;i<res.len;i++) res.z[i+1]+=res.z[i]/10,res.z[i]%=10; res.clean_pre_zero(); return res; } Int operator-(const Int &b) { Int res; res.len=len; for(int i=0;i<res.len;i++) res.z[i]=z[i]-b.z[i]; for(int i=0;i<res.len;i++) if(res.z[i]<0) { res.z[i+1]+=res.z[i]/10-1; res.z[i]%=10,res.z[i]+=10; } res.clean_pre_zero(); return res; } Int operator*(const Int &b) { Int res; res.len=len+b.len; for(int i=0;i<len;i++) for(int j=0;j<b.len;j++) res.z[i+j]+=z[i]*b.z[j]; for(int i=0;i<res.len;i++) res.z[i+1]+=res.z[i]/10, res.z[i]%=10; res.clean_pre_zero(); return res; } Int operator/(const Int &b) { Int res,cur; res.len=len; for(int i=len-1;i>=0;i--) { cur=cur*10+z[i]; while(cur>=b) cur=cur-b,res.z[i]++; } res.clean_pre_zero(); return res; } Int operator%(const Int &b) { Int res,cur; res.len=len; for(int i=len-1;i>=0;i--) { cur=cur*10+z[i]; while(cur>=b) cur=cur-b,res.z[i]++; } cur.clean_pre_zero(); return cur; } bool operator<(const Int &b)const { if(len!=b.len) return len<b.len; for(int i=len-1;i>=0;i--) if(z[i]!=b.z[i]) return z[i]<b.z[i]; return false; } bool operator>(const Int &b)const {return b<*this;} bool operator==(const Int &b)const {return !(*this>b)&&!(*this<b);} bool operator>=(const Int &b)const {return *this>b||*this==b;} bool operator<=(const Int &b)const {return *this<b||*this==b;} bool operator!=(const Int &b)const {return !(b==*this);} void operator+=(const Int &b) {*this=*this+b;} void operator-=(const Int &b) {*this=*this-b;} void operator*=(const Int &b) {*this=*this*b;} void operator/=(const Int &b) {*this=*this/b;} void operator%=(const Int &b) {*this=*this%b;} };
|