首页 > 解决方案 > 溢出错误:在将字符串与大整数相乘时,无法将“整数”放入索引大小的整数中

问题描述

` k = int(输入())

字符串 = 'codeforce'

实数 = 字符串 + k*'s'

打印(真实)`

我正在尝试将字符串 's' 与 int 10^16 相乘。

但它给了我 OverflowError: cannot fit 'int' into an index-sized integer

我怎样才能摆脱它?图像显示所有代码和错误

标签: python-3.xstringoverflow

解决方案


将字符串乘以整数k的结果是该字符串重复k次(无论乘法的顺序如何)。例如:

>>> 3 * "s"
'sss'

>>> "s" * 3
'sss'

在这种情况下,您请求了一个长度为 10^16 的字符串。这将需要 10 PB 的虚拟地址空间来存储。即使您的 python 实现原则上允许您创建该大小的对象,您的机器的物理硬件限制也极不可能允许它(甚至允许使用交换空间)。

确切的最大值可能取决于实现。例如,在 x86_64 Linux 上运行的 python 中,在kOverflowError为 2^63 或更大时引发an ,即当长度不能存储在 64-bit中时。对于小于该值但仍会耗尽内存的数字,则改为提高 a。signed longMemoryError

在您的 Python 实现中,截止值似乎低于 2^63(大约为9e18)。因此,有可能将 32 位signed int用作“索引大小整数”,这意味着最大字符串长度为 2GB。如果是这种情况,那么这在您的系统上实际上合理的物理内存量之内,在这种情况下,可能存在一个实际上很重要的限制。在这种情况下,您可能需要重新设计任何代码以减少使用的字符串的长度。


推荐阅读