多个函数需要用到无符号数值的比较,即需要比较绝对值,所以实现三个私有成员函数用来比较绝对值的大小。<=用!>来实现,同理>=用!<来实现,!=用!==来实现,所以只需要三个友元函数即可。对于无符号数值,字符串的大小跟数值的大小一致,由于‘+’的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; }