算法入门经典P126(BigInteger+,<,>,<=,>=,!=,==,+=)

#include<iostream>
using namespace std;
#include<vector>
#include<cstring>
struct BigInteger{
    static const int BASE = 100000000;
    static const int WIDTH = 8;
    vector<int>s; 
    BigInteger(long long num = 0){
        *this = num;
    }
    BigInteger operator = (long long num){
        s.clear();
        do{
            s.push_back(num%BASE);
            num /= BASE;
        }while(num>0);
        return *this;
    } 
    BigInteger operator = (const string&str){//123456789
        s.clear();
        int x,len = (str.length()-1)/WIDTH + 1;//len=2
        for(int i=0;i<len;i++){
            int end = str.length()-i*WIDTH;//end=9,1
            int start = max(0,end-WIDTH);//start=1,0
            sscanf(str.substr(start,end-start).c_str(),"%d",&x);
            s.push_back(x);
        }
        return *this;
    }
    BigInteger operator +(const BigInteger&b)const{
        BigInteger c;
        c.s.clear();
        for(int i=0,g=0;;i++){
            if(g==0&&i>=s.size()&&i>=b.s.size())break;
            int x = g;
            if(i<s.size())x += s[i];
            if(i<b.s.size())x += b.s[i];
            c.s.push_back(x%BASE);
            g = x/BASE; 
        }
        return c;
    }
    BigInteger operator += (const BigInteger&b){
        *this = *this+b;
        return *this;
    }
    bool operator <(const BigInteger&b)const{
        if(s.size()!=b.s.size())return s.size()<b.s.size();
        for(int i=s.size()-1;i>=0;i--){
            if(s[i]!=b.s[i]){
                return s[i]<b.s[i];
            }
        }
        return false;
    }
    bool operator >(const BigInteger&b)const{
        return b<*this;
    }
    bool operator <=(const BigInteger&b)const{
        return !(b<*this);
    }
    bool operator >=(const BigInteger&b)const {
        return !(*this<b);
    }
    bool operator !=(const BigInteger&b)const{
        return b<*this||*this<b;
    }
    bool operator ==(const BigInteger&b)const{
        return !(b<*this||*this<b);
    }
};
ostream&operator <<(ostream&out,BigInteger&x){
    out<<x.s.back();
    char buf[20];
    for(int i=x.s.size()-2;i>=0;i--){
        sprintf(buf,"%08d",x.s[i]);
        for(int j=0;j<strlen(buf);j++){
            out<<buf[j];
        }
    }
    return out;
}
istream&operator >>(istream&in,BigInteger&x){
    string s;
    if(!(in>>s)){
        return in;
    }
    x = s;
    return in;
}
int main(){
    BigInteger x,y;
    cin>>x>>y;
    bool f;
    f = x<y;
    cout<<f<<endl;
    f = x>y;
    cout<<f<<endl;
    f = x!=y;
    cout<<f<<endl;
    f = x<=y;
    cout<<f<<endl;
    f = x>=y;
    cout<<f<<endl;
    f = x==y;
    cout<<f<<endl;
    return 0;
}

 

上一篇:Effective Java---17 最小化可变性


下一篇:JAVA 蓝桥杯 八次求和省赛真题