w22116972
4/9/2014 - 6:23 AM

大數 bigN

大數 bigN

const int MAX = 1000;

struct bigN{
     int len, s[MAX];
     
     // construct
     bigN(){ memset(s,0,sizeof(s)); len = 1;}
     
     // able to input INT or STR
     bigN operator = (int num){
          char s[MAX];
          sprintf(s,"%d",num);
          *this =s;
          return *this;
     }
     bigN(int num){*this = num;}
    
     bigN operator = (const char* num){
          len = strlen(num);
          for(int i=0; i<len; i++) s[i] = num[len-i-1]-'0';
          return *this;
     }
     bigN(const char* num){*this = num;}
     
     // convert to STR
     string str() const{
       string temp="";
       for(int i=0; i<len; i++) temp= (char)(s[i] + '0') + temp;
       if(temp="") temp="0";
       return temp;
     }
     
     // mk iostream to support bigN
     istream& operator >> (istream &in, bigN& x){
       string s;
       in >> s;
       x = s.c_str();
       return in;
     }
     ostream& operator << (ostream &out, bigN& x){
       out << x.str();
       return out;
     }
     
     // operator overloading : add 
     bigN operator + (const bigN& x) const {
       
     }
     
     // operator overloaging : cmp
     bool operator < (const bigN& x) const{
       if(len != x.len) return len < x.len;
       for(int i=len-1; i>=0; i--){
         if(s[i] != x.s[i]) return s[i] < x.s[i];
       }
       return false;
     }
}