您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何在合理的时间内将绝对大数转换为字符串?

如何在合理的时间内将绝对大数转换为字符串?

众所周知,重复的字符串连接效率很低,因为Python字符串是不可变的。我会去

strprime = str(prime)

以我的基准而言,这始终是最快的解决方案。这是我的小基准程序:

import decimal

def f1(x):
    ''' DeFinition by OP '''
    strprime = ""
    while x > 0:
        strprime += str(x%10)
        x //= 10
    return strprime

def digits(x):
    while x > 0:
        yield x % 10
        x //= 10

def f2(x):
    ''' Using string.join() to avoid repeated string concatenation '''
    return "".join((chr(48 + d) for d in digits(x)))

def f3(x):
    ''' Plain str() '''
    return str(x)

def f4(x):
    ''' Using Decimal class'''
    return decimal.Decimal(x).to_eng_string()

x = 2**100

if __name__ == '__main__':
    import timeit
    for i in range(1,5):
        funcName = "f" + str(i)
        print(funcName+ ": " + str(timeit.timeit(funcName + "(x)", setup="from __main__ import " + funcName + ", x")))

对我来说,这是打印的(使用Python 2.7.10):

f1: 15.3430171013
f2: 20.8928260803
f3: 0.310356140137
f4: 2.80087995529
其他 2022/1/1 18:36:30 有528人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶