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

如何比较长度≥100的数字字符串?stoi/stoll触发溢出错误

超长数字字符串比较方案

当数字字符串长度超过stoll等函数的处理范围时,直接转整数会触发溢出错误,此时可以通过字符串本身的特性来比较大小,步骤如下:

核心逻辑

  • 先比长度:对于无符号的数字字符串,长度更长的对应数字更大。比如长度101的字符串肯定比长度100的大。
  • 长度相同则逐位对比:从左到右依次比较每个位置的字符,第一个出现差异的位置上,字符ASCII值更大的那个数字字符串对应的数值更大。

额外边界处理

如果字符串存在前导零(比如"00012345..."),需要先去除前导零再执行上述比较逻辑。注意如果字符串全是零(比如"0000"),处理后要保留一个"0"。

C++示例代码

#include <string>
#include <algorithm>

// 去除前导零
std::string trimLeadingZeros(const std::string& s) {
    size_t start = s.find_first_not_of('0');
    if (start == std::string::npos) {
        return "0"; // 全零情况
    }
    return s.substr(start);
}

// 比较两个超长数字字符串,返回值:1表示str1>str2,-1表示str1<str2,0表示相等
int compareBigNumberStrings(std::string str1, std::string str2) {
    // 先处理前导零
    str1 = trimLeadingZeros(str1);
    str2 = trimLeadingZeros(str2);
    
    // 比较长度
    if (str1.length() > str2.length()) {
        return 1;
    } else if (str1.length() < str2.length()) {
        return -1;
    } else {
        // 长度相同,逐位比较
        for (size_t i = 0; i < str1.length(); ++i) {
            if (str1[i] > str2[i]) {
                return 1;
            } else if (str1[i] < str2[i]) {
                return -1;
            }
        }
        return 0; // 所有位都相同
    }
}

内容的提问来源于stack exchange,提问作者Ankit Pathak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:45:25