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

Python处理超大整数时触发OverflowError溢出错误的问题咨询

问题根因

报错核心不是Python大整数运算能力不足,是原有实现逻辑的思路错误:代码试图构造一个长度与n(测试用例中为10^12量级)完全相等的实体字符串,再做切片、转列表遍历计数。

  • 当n达到万亿级别时,s*(int(n/len(s))+1) 会尝试申请存储万亿级字符的连续内存,本身就不具备可行性
  • Python字符串乘法、切片操作处理的长度参数超过平台索引位长上限(32/64位平台的索引可表示范围远小于1e12)时,就会抛出OverflowError: cannot fit 'int' into an index-sized integer错误
  • 即使绕过溢出报错,构造超长字符串带来的内存开销、遍历耗时也会直接超出OJ的时间、内存限制,无法通过测试。
修复思路

这道题是典型的计数类算法题,完全不需要模拟字符串的实际重复拼接过程,通过数学拆分计算就可以在O(len(s))时间复杂度、O(1)额外空间复杂度下得到结果,从根源上规避大长度字符串构造带来的所有问题:

  1. 先统计单个原始字符串s中字符a的出现次数
  2. 计算长度为n的范围内,完整包含多少个原始字符串,这部分的a总数可以直接用「完整重复次数 × 单个字符串的a计数」算出
  3. 计算最后不足一个完整字符串的余数长度,统计原始字符串前余数位中a的出现次数,和上一步的结果相加就是最终答案。
可直接通过测试的实现代码
def repeatedString(s, n):
    s_length = len(s)
    # 统计单个原字符串内a的数量
    a_in_single = s.count('a')
    # 计算完整重复段的a总数
    full_part = (n // s_length) * a_in_single
    # 计算末尾剩余截断段的a总数
    remain_part = s[:n % s_length].count('a')
    return full_part + remain_part

if __name__ == '__main__':
    s = input()
    n = int(input().strip())
    res = repeatedString(s, n)
    print(res)

该实现的运行耗时仅和输入字符串s的长度有关,和n的大小完全无关,哪怕n取值到1e18也不会触发溢出、内存不足或超时问题。针对给出的测试用例s='a', n=1000000000000,代码会直接返回正确结果1000000000000,全程不会构造任何超长字符串。

内容的提问来源于stack exchange,提问作者Jayan Paliwal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:27:13