Python中整数的长度

在Python中,如何找到整数位数?



蝴蝶不菲
浏览 2196回答 3
3回答

慕尼黑5688855

如果您希望整数的长度与整数的位数相同,则始终可以将其转换为string,str(133)并找到其长度,如len(str(123))。

海绵宝宝撒

不转换为字符串import mathdigits = int(math.log10(n))+1同时处理零和负数import mathif n > 0:    digits = int(math.log10(n))+1elif n == 0:    digits = 1else:    digits = int(math.log10(-n))+2 # +1 if you don't count the '-' 您可能希望将其放入函数中:)这是一些基准。在len(str())已经落后的甚至是相当小的数字timeit math.log10(2**8)1000000 loops, best of 3: 746 ns per looptimeit len(str(2**8))1000000 loops, best of 3: 1.1 µs per looptimeit math.log10(2**100)1000000 loops, best of 3: 775 ns per loop timeit len(str(2**100))100000 loops, best of 3: 3.2 µs per looptimeit math.log10(2**10000)1000000 loops, best of 3: 844 ns per looptimeit len(str(2**10000))100 loops, best of 3: 10.3 ms per loop

慕娘9325324

所有math.log10解决方案都会给您带来问题。math.log10速度很快,但是当您的数字大于999999999999997时会出现问题。这是因为float的.9s太多,导致结果四舍五入。解决方案是对大于该阈值的数字使用while计数器方法。为了使其更快,请创建10 ^ 16、10 ^ 17,依此类推,并作为变量存储在列表中。这样,它就像一个表查找。def getIntegerPlaces(theNumber):&nbsp; &nbsp; if theNumber <= 999999999999997:&nbsp; &nbsp; &nbsp; &nbsp; return int(math.log10(theNumber)) + 1&nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; counter = 15&nbsp; &nbsp; &nbsp; &nbsp; while theNumber >= 10**counter:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; counter += 1&nbsp; &nbsp; &nbsp; &nbsp; return counter
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python