使用巨大的int表示为字符串

时间:2017-12-30 14:40:05

标签: python-3.x

学习Python只需两个月,所以请耐心等待。)

偶然发现非常有趣的任务 - 使用数字( n: int, number of digits < 10**6 )执行算术运算,表示为str ( len(str) < 10**6 )。我需要将这个字符串分成几部分,制作一些简单的算术,并将输出作为字符串返回。转换为int和back需要大约0.5秒:

from time import time
from random import choice

string = ''
digits = [str(i) for i in range(10)]

for _ in range(1, 99999):
    string += choice(digits)

start = time()
a, b = string[:50000], string[50000:]  # Split in half
a, b = map(int, [a, b])
print('str to int:', time() - start)
# Output: str to int: 0.1092...

c = a + b

start = time()
output = ''.join([str(part) for part in [a, b, c]])
print('int to str:', time() - start)
# Output: int to str: 0.4836...

当我需要在数百次次迭代的循环中执行此操作时,问题就开始了

这是关于类似反向散列函数的东西

我的简单问题是 - 在这种情况下可以进行哪种优化?

致以最诚挚的问候! 。)

1 个答案:

答案 0 :(得分:0)

Vadim,我无法直接回答你的问题。但是,让我指出gmpy2 library。主要作者是我们过去经常在这里看到的那些非常聪明的人之一;你可以使用gmpy2本身,或者查看源代码。

>>> from gmpy2 import *
>>> s = '012345678901234'
>>> t = '123456789012345'
>>> N = mpz(s)+mpz(t)
>>> N
mpz(135802467913579)
>>> str(N)
'135802467913579'