Package Big Int Number Class

  高精度整形数封装类。

  操作符<<和>>注意使用友元标记,否则编译错误。

#include <iostream>
#include <string>
#include <vector>
using namespace std;

struct bign {
    vector<short> num;
        
    bign() {
        num.push_back(0);
    }

    bign(const char* str) {
        *this = str;
    }

    bign &operator = (const char* str) {
        string s = str;
        num.clear();
        for (int i=s.size()-1; i>=0; --i) {
            char c = s[i];
            num.push_back(c - '0');
        }
        return *this;
    }

    bign operator + (const bign &n) const {
        bign tmp;
        tmp.num.clear();
        int a = num.size();
        int b = n.num.size();
        int d = a > b ? b : a;
        int c = 0;
        for (int i=0; i<d; ++i) {
            short v = num[i] + n.num[i] + c;
            tmp.num.push_back(v%10);
            c = v/10;
        }
        if (a > b) {
            for (int i=d; i<a; ++i) {
                short v = num[i] + c;
                tmp.num.push_back(v%10);
                c = v/10;
            }
        } else {
            for (int i=d; i<b; ++i) {
                short v = n.num[i] + c;
                tmp.num.push_back(v%10);
                c = v/10;
            }
        }
        return tmp;
    }

    bool operator < (const bign &n) const {
        if (num.size() != n.num.size()) {
            return num.size() < n.num.size();
        }
        for (int i=num.size()-1; i>=0; --i) {
            if (num[i] != n.num[i]) {
                return num[i] < n.num[i];
            }
        }
        return false;
    }

    friend istream &operator >> (istream &in, bign &n) {
        string s;
        in >> s;
        n = s.c_str();
        return in;
    }

    friend ostream &operator << (ostream &out, const bign &n) {
        for (int i=n.num.size()-1; i>=0; --i) {
            out << n.num[i];
        }
        return out;
    }
};

int main() {
    bign n = "123";
    bign m;
    m = "1123";
    cout << n+m << endl;
    cout << (n<m) << endl;
    return 0;
}

 

posted @ 2014-09-18 10:29  awarrior  阅读(201)  评论(0编辑  收藏  举报