给出一个数k,求最小的n,使得n的阶乘后面0的数量>=k。
例如k=1,
5的阶乘 = 12345 = 120,120后面有1个0。并且4的阶乘后面没有0,所以5是最小的结果。
输入 一个数k(1 <= k <= 10^9) 输出 输出最小的满足条件的n。 输入样例 1 输出样例 5 解法: 每个0都是由2*5求得出来的,因而每个5之前肯定有存在足量的2,因此只需计算5的个数即可,当碰到25,50,125这种可以分解为多个5的数,便需要多计算,采用二分快速计算,二分时注意边界情况,0的个数不是连续的 代码:
using namespace std;
int n;
long long c(int x)
{
long long sum = x;
int now = 5;
while(x/now != 0)
{
sum += x/now;
now *= 5;
}
return sum;
}
int main()
{
scanf("%d", &n);
int l = 1, r = n;
long long ans = 0;
while(l < r)
{
int m = (l+ r)/2;
// printf("l:%d r:%d m:%d\n",l,r,m);
if(c(m) < n)
l = m + 1;
else if(c(m) > n)
r = m;
else
{
ans = m;
break;
}
}
if(ans != 0)
{
printf("%lld", ans * 5);
return 0;
}
if(c(l) == n)
ans = l;
else
{
ans = r;
}
printf("%lld", ans * 5);
return 0;
}