如何在不将其转换为字符串的情况下检测整数的中间数字是否"0"?



尝试创建一个函数,该函数检测奇数的中间数字为0,如果是,则返回True,否则返回False。我真的很想让这个函数工作,而无需先将整数转换为字符串。

这是我到目前为止所拥有的:

def test(n): 
n = str(n)
if len(n) % 2 == 0:
return False
else:
left_side = n[:len(n)//2]
right_side = n[(len(n)//2):]
if right_side[:1] == "0" and ((not "0" in left_side)and (not "0" in right_side[2:])):
return True
else:
return False

print (test(0)) # True
print (test(101)) # True
print (test(123)) # False
print (test(21031)) # True
n = 12345
digits = []
while n:
digit = n % 10
digits.append(digit)
n //= 10
digit_count = len(digits)
if digit_count % 2:
middle = digit_count // 2
print(digits[middle])

输出:

3

或者,使用math.log10

from math import log10
n = 12345
digit_count = int(log10(n)) + 1
middle = digit_count // 2
print(n // 10 ** middle % 10)

请看这两个答案:

Python 中整数的长度

如何在python中获取数字的第n位数字

这应该可以做到。 它确实将其转换为字符串,但老实说,它更快,更容易,效率更高。

num = int(input("number too test: "))

def test(number):
num_len = len(str(number))
print(num_len)
if num_len % 2 == 0:
return False
else:
number = str(number)
half = int((num_len-1)/2)
print(number[half])
if int(number[half]) is 0:
return True
else:
return False

test(num)

并不是说它在性能方面会有太大差异,但您可以使用log函数来计算数字中的零数,并通过除以正确的 10 次方来删除最右边的一半。例如:

import math
def test(n):
if n == 0:
return True
digits = math.ceil(math.log(n + 1, 10)) - 1
return digits % 2 == 0 and not (n // 10**(digits / 2) % 10)

最新更新