793. 阶乘函数后 K 个零
f(x) 是 x! 末尾是 0 的数量。回想一下 x! = 1 * 2 * 3 * ... * x,且 0! = 1 。
例如, f(3) = 0 ,因为 3! = 6 的末尾没有 0 ;而 f(11) = 2 ,因为 11!= 39916800 末端有 2 个 0 。
给定 k,找出返回能满足 f(x) = k 的非负整数 x 的数量。
class Solution:
def preimageSizeFZF(self, k: int) -> int:
# 计算任意数num的阶乘结果中 0 的个数
def check(num):
count = 0
while num > 0:
count += num // 5 # 取余
num //= 5
return count
# 使用二分查找来确定实现等于k的num下界
low = 0
high = 10**10
while low < high - 1:
mid = low + (high - low) // 2
# 偏大向左走
if check(mid) >= k:
high = mid
# 偏小向右走
else:
low = mid
# 找出具体的数字个数(每隔6个数阶乘0的个数必然增加)
res = 0
for num in range(low, low+6):
if check(num) == k:
res += 1
return res
网友评论