• 高精度(大整数)运算重载运算符


    #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;
    }
    代码
  • 相关阅读:
    03 python基础——logging模块
    六、Celery任务执行超时的设置
    python 单例模式线程安全的示例
    Linux samba磁盘的挂载
    Linux 添加新硬盘无法识别[无需重启]的解决方法
    Windows注册表关闭系统服务
    五、Celery 高级用法【20200912】
    四、Celery 路由学习篇
    三、Celery Linux操作系统后台启动的服务制作
    二、Python Celery 4.4.7 与 Django 2.X的集成【定时任务的调用】
  • 原文地址:https://www.cnblogs.com/frankying/p/8544337.html
Copyright © 2020-2023  润新知