为了账号安全,请及时绑定邮箱和手机立即绑定

Python中整数的长度

Python中整数的长度

蝴蝶不菲 2019-12-10 09:57:46
在Python中,如何找到整数位数?
查看完整描述

3 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

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


查看完整回答
反对 回复 2019-12-10
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

不转换为字符串


import math

digits = int(math.log10(n))+1

同时处理零和负数


import math

if n > 0:

    digits = int(math.log10(n))+1

elif n == 0:

    digits = 1

else:

    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 loop

timeit len(str(2**8))

1000000 loops, best of 3: 1.1 µs per loop


timeit 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 loop


timeit math.log10(2**10000)

1000000 loops, best of 3: 844 ns per loop

timeit len(str(2**10000))

100 loops, best of 3: 10.3 ms per loop


查看完整回答
反对 回复 2019-12-10
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

所有math.log10解决方案都会给您带来问题。

math.log10速度很快,但是当您的数字大于999999999999997时会出现问题。这是因为float的.9s太多,导致结果四舍五入。


解决方案是对大于该阈值的数字使用while计数器方法。


为了使其更快,请创建10 ^ 16、10 ^ 17,依此类推,并作为变量存储在列表中。这样,它就像一个表查找。


def getIntegerPlaces(theNumber):

    if theNumber <= 999999999999997:

        return int(math.log10(theNumber)) + 1

    else:

        counter = 15

        while theNumber >= 10**counter:

            counter += 1

        return counter


查看完整回答
反对 回复 2019-12-10
  • 3 回答
  • 0 关注
  • 2194 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信