仅使用9s创建“n”位数字,其中“n”是可变的

比如用户输入5,输出:99999

我知道我可以使用 for 循环来连接字符串,然后对字符串进行 int 处理,但是这个解决方案似乎无效。

回答

尝试这个:

>>> n = 6
>>> 10**n - 1
999999

与替代方案的性能比较,int("9" * n)

>>> from timeit import timeit
>>> timeit('10**n - 1', setup='n = 1000')
3.0823026559999107
>>> timeit('int("9" * n)', setup='n = 1000')
10.0500816629999 # > 3 times slower
>>> timeit('10**n - 1', setup='n = 100000', number=100)
0.5580871940001089
>>> timeit('int("9" * n)', setup='n = 100000', number=100)
7.984304671000245 # > 14 times slower

事实上10**n - 1,渐近更有效,因为幂运算是由平方和乘法算法计算的,该算法执行 O(log n) 算术运算,而将字符串转换为"9" * n整数执行 O(n) 算术运算。

当然,如果您希望输出是字符串而不是int,那么您可以直接执行"9" * n,这将是最快的方式。


以上是仅使用9s创建“n”位数字,其中“n”是可变的的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>