难度:
Hard
题意:
思路:
解法:
class Solution {
private long cal5(long n) {
long ret = 0;
while (n != 0) {
ret += n / 5;
n /= 5;
}
return ret;
}
private long upper(long left, long right, int k) {
while (right - left > 1) {
long mid = (left + right) / 2;
if (cal5(mid) <= k) {
left = mid;
} else {
right = mid;
}
}
if (cal5(left) == k) {
return left;
} else {
return -1;
}
}
private long lower(long left, long right, int k) {
while (right - left > 1) {
long mid = (left + right) / 2;
if (cal5(mid) >= k) {
right = mid;
} else {
left = mid;
}
}
if (cal5(right) == k) {
return right;
} else {
return -1;
}
}
public int preimageSizeFZF(int K) {
long n = upper(1, 6000000000L, K);
if (n == -1) {
return 0;
} else {
long m = lower(-1, n, K);
return (int) (n - m + 1);
}
}
}