OverflowError: невозможно поместить int в целое число размера индекса при умножении строки на большое int - PullRequest
0 голосов
/ 18 июня 2020

`k = int (input ())

string = 'codeforce'

real = string + k * 's'

print (real)`

Я пытаюсь умножить строку 's' на int 10 ^ 16.

Но это дает мне OverflowError: не может поместиться 'int' в целое число размера индекса

Как от него избавиться? На картинке показан весь код и ошибка

1 Ответ

0 голосов
/ 18 июня 2020

Результатом умножения строки на целое число k будет эта строка повторяется k раз (в любом порядке умножения). Например:

>>> 3 * "s"
'sss'

>>> "s" * 3
'sss'

В этом случае вы запросили строку длиной 10 ^ 16. Для этого потребуется 10 петабайт виртуального адресного пространства. Даже если ваша реализация python в принципе позволяет вам создать объект такого размера, крайне маловероятно, что физические ограничения вашего компьютера позволят это (даже с учетом использования пространства подкачки).

точный максимум, вероятно, будет зависеть от реализации. Например, в python, запущенном на x86_64 Linux, возникает OverflowError, где k равно 2 ^ 63 или больше, то есть когда длина не может быть сохранена в 64-битном signed long . Для чисел меньше этого, но где память, тем не менее, была бы исчерпана, вместо этого поднимается MemoryError.

В вашей реализации Python отсечка кажется ниже 2 ^ 63 (что примерно 9e18). Поэтому возможно, что 32-битное signed int используется как «целое число размера индекса», что подразумевает максимальную длину строки 2 ГБ. Если это так, то это находится в пределах объема физической памяти, который реально возможен в вашей системе, и в этом случае возможно, что существует предел, который действительно имеет значение. В этом случае вам может потребоваться переработать любой код, чтобы уменьшить длину используемых строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...