zoukankan      html  css  js  c++  java
  • 高精度(大整数)运算重载运算符

    #include<cstdio>
    #include<cstring>
    #include<vector>
    #include<algorithm>
    #include<iostream>
    using namespace std;
    
    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) { // 赋值运算符
            s.clear();
            int x, len = (str.length() - 1) / WIDTH + 1;
            for (int i = 0; i < len; i++) {
                int end = str.length() - i*WIDTH;
                int start = max(0, end - WIDTH);
                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) 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()) {                
                    if (s[i] < b.s[i]) {
                        x += BASE;
                        g = -1;
                    }
                    x -= b.s[i];
                }
                c.s.push_back(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 (*this < b || b < *this); }
        bool operator == (const BigInteger& b) const { return (!(*this < b) && !(b < *this)); }
    };
    
    ostream& operator << (ostream &out, const BigInteger& x) {
        out << x.s.back();
        for (int i = x.s.size()-2; i >= 0; i--) {
            char buf[20];
            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;
    }
    
    #include<set>
    #include<map>
    set<BigInteger> s;
    map<BigInteger, int> m;
    
    int main() {
        BigInteger y;
        BigInteger x = y;
        BigInteger z = 123;
    
        BigInteger a, b;
        cin >> a >> b;
        cout << a - b << "
    ";
        //cout << BigInteger::BASE << "
    ";
        return 0;
    }
    代码
  • 相关阅读:
    无线鼠标换电池了
    Jython Interactive Servlet Console YOU WILL NEVER KNOW IT EXECLLENT!!! GOOD
    Accessing Jython from Java Without Using jythonc
    jython podcast cool isnt't it?
    Python里pycurl使用记录
    Creating an Interactive JRuby Console for the Eclipse Environment
    微软为AJAX和jQuery类库提供CDN服务
    Download A File Using Cygwin and cURL
    What is JMRI?这个是做什么用的,我真没看懂但看着又很强大
    用curl 发送指定的大cookie的http/https request
  • 原文地址:https://www.cnblogs.com/frankying/p/8544337.html
Copyright © 2011-2022 走看看