You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 15:18:03