算法入门经典P124(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;
    }
};
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;
    cin>>x;
    cout<<x<<endl; 
    return 0;
}

 

posted @ 2021-07-16 14:05  智人心  阅读(73)  评论(0)    收藏  举报