给出一个数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;
}