1 #include2 #include 3 #include 4 #include 5 #define N 10000 6 using namespace std; 7 struct Big_Number 8 { 9 int a[N+10]; 10 Big_Number() 11 { 12 memset(a,0,sizeof(a)); 13 a[0]=1; 14 } 15 Big_Number(int n) 16 { 17 memset(a,0,sizeof(a)); 18 a[0]=0; 19 while(n) 20 { 21 a[++a[0]]=n%10; 22 n/=10; 23 } 24 if(!a[0]) 25 a[0]=1; 26 } 27 Big_Number(char *s) 28 { 29 memset(a,0,sizeof(a)); 30 int len=strlen(s); 31 for(int i=1;i<=len;i++) 32 a[i]=s[len-i]-'0'; 33 a[0]=len; 34 } 35 Big_Number operator*(const Big_Number &b)const 36 { 37 Big_Number c; 38 int i,j,len=a[0]+b.a[0]; 39 for(i=1;i<=a[0];i++) 40 for(j=1;j<=b.a[0];j++) 41 c.a[i+j-1]+=a[i]*b.a[j]; 42 for(i=1;i 1&&!c.a[len]) 47 len--; 48 c.a[0]=len; 49 return c; 50 } 51 Big_Number operator/(int b)const 52 { 53 Big_Number c; 54 int d=0,i,len=a[0]; 55 for(i=a[0];i;i--){ 56 d=d*10+a[i]; 57 c.a[i]=d/b; 58 d%=b; 59 } 60 while(len>1&&!c.a[len]) 61 len--; 62 c.a[0]=len; 63 return c; 64 } 65 Big_Number operator+(const Big_Number &b)const 66 { 67 Big_Number c; 68 int len=max(a[0],b.a[0]),i; 69 for(i=1;i<=len;i++){ 70 c.a[i]+=a[i]+b.a[i]; 71 c.a[i+1]=c.a[i]/10; 72 c.a[i]%=10; 73 } 74 len++; 75 while(len>1&&!c.a[len]) 76 len--; 77 c.a[0]=len; 78 return c; 79 } 80 Big_Number operator-(const Big_Number &b)const 81 { 82 Big_Number c; 83 int i,len=a[0]; 84 for(i=1;i<=len;i++) 85 { 86 c.a[i]+=a[i]-b.a[i]; 87 if(c.a[i]<0)c.a[i]+=10,c.a[i+1]--; 88 } 89 while(len>1&&!c.a[len])len--; 90 c.a[0]=len; 91 return c; 92 } 93 void operator*=(const Big_Number &x){*this=*this*x;} 94 void operator/=(const int &x){*this=*this/x;} 95 void operator+=(const Big_Number &x){*this=*this+x;} 96 void operator-=(const Big_Number &x){*this=*this-x;} 97 void print(){ 98 for(int i=a[0];i;i--) 99 printf("%d",a[i]);100 }101 bool operator>(const Big_Number&b)const102 {103 if(a[0]>b.a[0])104 return 1;105 if(a[0] b.a[i])109 return 1;110 else if(a[i] b.a[0])119 return 0;120 for(int i=a[0];i;i--)121 if(a[i] b.a[i])124 return 0;125 return 0;126 }127 bool operator<=(const Big_Number&b)const{ return !(*this>b);}128 Big_Number operator/(const Big_Number&b)const129 {130 Big_Number l(0),r(*this),mid;131 while(l