自定义BigNum大数库结合冒泡排序多位数排序错误问题
问题根源
你当前的BigNum类中重载的>和<运算符直接使用了C++ std::string的默认比较逻辑,这种比较是字典序比较,不是数值大小比较:比如字符串"100"的首字符'1'字典序小于"3"的首字符'3',所以代码会判定"100" < "3",最终导致多位数排序错误。
你已经在类的私有方法中实现了正确判断数值大小的isSmaller函数,只需要修改运算符重载的逻辑复用这个方法即可解决问题。
修复方案
修改BigNum类中operator>和operator<的实现,替换原有直接比较字符串的逻辑:
// 原错误实现 // bool operator > (BigNum a1) { // if (this->num>a1.num){ // return true; // } // else{ // return false; // } // } // bool operator < (BigNum a1) { // if (this->num<a1.num){ // return true; // } // else{ // return false; // } // } // 替换为正确实现 bool operator > (BigNum a1) { // a1数值比当前数小 = 当前数更大 return isSmaller(a1.num, this->num); } bool operator < (BigNum a1) { // 当前数数值比a1小 return isSmaller(this->num, a1.num); }
可选补充:为了逻辑完整,建议额外实现==运算符,避免后续其他调用逻辑出现问题:
bool operator == (BigNum a1) { return this->num == a1.num; }
修改完成后再运行多位数测试用例,就能得到正确的排序结果1 3 5 8 100。
内容的提问来源于stack exchange,提问作者smartnima
相关产品推荐
相关产品推荐

