多个函数需要用到无符号数值的比较,即需要比较绝对值,所以实现三个私有成员函数用来比较绝对值的大小。<=用!>来实现,同理>=用!<来实现,!=用!==来实现,所以只需要三个友元函数即可。对于无符号数值,字符串的大小跟数值的大小一致,由于‘+’的ASCII码比‘-’的小,所以判断符号位大小时则刚好相反。赋值由于有string重载了等号的便利,也很容易实现。对于不改变对象值的成员函数要统一加const。

inline bool BigInt::equal(const string& rval) const
{
    return num.substr(1) == rval.substr(1);
}
inline bool BigInt::smaller(const string& rval) const
{
    if(num.size() == rval.size()){
        return num.substr(1) < rval.substr(1);
    } else
        return num.size() < rval.size();
}
inline bool BigInt::greater(const string& rval) const
{
    if(num.size() == rval.size()){
        return num.substr(1) > rval.substr(1);
    } else
        return num.size() > rval.size();
}
inline bool operator==(const BigInt& lval, const BigInt& rval)
{
    return lval.num == rval.num;
}

inline bool operator!=(const BigInt& lval, const BigInt& rval)
{
    return !(lval == rval);
}

inline bool operator<(const BigInt& lval, const BigInt& rval)
{
    if(lval.num[0] != rval.num[0])
        return lval.num[0] > rval.num[0];
    else {
        if(lval.num[0] == '+')
            return lval.smaller(rval.num);
        else
            return rval.smaller(lval.num);
    }
}

inline bool operator>(const BigInt& lval, const BigInt& rval)
{
    if(lval.num[0] != rval.num[0])
        return lval.num[0] < rval.num[0];
    else {
        if(lval.num[0] == '+')
            return lval.greater(rval.num);
        else
            return rval.greater(lval.num);
    }
}

inline bool operator<=(const BigInt& lval, const BigInt& rval)
{
    return !(lval > rval);
}

inline bool operator>=(const BigInt& lval, const BigInt& rval)
{
    return !(lval < rval);
}

inline BigInt& BigInt::operator =(const BigInt &rval)
{
    num = rval.num;
    return *this;
}