python-3.x - 溢出错误:在将字符串与大整数相乘时,无法将“整数”放入索引大小的整数中
问题描述
` k = int(输入())
字符串 = 'codeforce'
实数 = 字符串 + k*'s'
打印(真实)`
我正在尝试将字符串 's' 与 int 10^16 相乘。
但它给了我 OverflowError: cannot fit 'int' into an index-sized integer
我怎样才能摆脱它?图像显示所有代码和错误
解决方案
将字符串乘以整数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 long
MemoryError
在您的 Python 实现中,截止值似乎低于 2^63(大约为9e18
)。因此,有可能将 32 位signed int
用作“索引大小整数”,这意味着最大字符串长度为 2GB。如果是这种情况,那么这在您的系统上实际上合理的物理内存量之内,在这种情况下,可能存在一个实际上很重要的限制。在这种情况下,您可能需要重新设计任何代码以减少使用的字符串的长度。
推荐阅读
- macros - 如何在宏参数中传递一系列数值?
- c# - 在类声明与构造函数中初始化对象的区别
- javascript - 字段长度始终 = 1
- google-app-maker - Google App Maker Widget Validate on Datasource select
- xml - 如何使用 xslt 将给定的 xml 转换为如下内容
- python - Python从输入文件中读取行并写回文件
- c# - 有没有办法正确传递包含“?”的字符串 到 .net 核心 web api?
- python - python程序重载'=='运算符以打印具有相同分数的学生的详细信息
- css - 在测试用例上找不到 iframe
- c# - 如何从下拉列表中将项目添加到列表框中