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
的数量。
示例 1:
输入:k = 0 输出:5 解释:0!, 1!, 2!, 3!, 和 4! 均符合 k = 0 的条件。
示例 2:
输入:k = 5 输出:0 解释:没有匹配到这样的 x!,符合 k = 5 的条件。
示例 3:
输入: k = 3 输出: 5
class Solution { public: int trailingZeroes(long n) { int cnt = 0; while(n>0) { cnt += n / 5; n = n /5; } return cnt; } int left_bound(long k) { long lo = 0,hi = 5*k; while(lo < hi) { long mid = lo + (hi - lo) / 2; if (trailingZeroes(mid)<k) { lo = mid + 1; } else if (trailingZeroes(mid)>k) { hi = mid; } else { hi = mid; } } return lo; } int right_bound(long k) { long lo = 0,hi = 5*k; while(lo < hi) { long mid = lo + (hi - lo) / 2; if (trailingZeroes(mid)<k) { lo = mid + 1; } else if (trailingZeroes(mid)>k) { hi = mid; } else { lo = mid + 1; } } return lo-1; } int preimageSizeFZF(int k) { if(k==0 || k ==3 ) return 5; return right_bound(k) - left_bound(k) +1; } };