仅使用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,这将是最快的方式。