求阶乘相关问题输出异常

问题遇到的现象和发生背景

该代码是求解输入一个n(0<n<=10^18),求满足K!后面有n个0,输出满足条件的最小的K,若不存在则输出-1

我的思路是用二分法在【0,4^19】范围里查找符合该条件的数(4^19!后面有1e+18个零,满足题目要求)
但输出一直都是-1

问题相关代码

#include<iostream>
#include<math.h>
using namespace std;
int ling(long double g);
int main()//通过二分法来寻找尾数中有m个0的数
{
    long double n;
    cin>>n;
    long double r=0,l=pow(4,19),mid;
    long double d;
    while(r<=l)
    {
        mid=(r+l)/2;
        d=ling(mid);
        if (n <= d)
        {
            l = mid - 1;
        }
        else if(n > d)
        {
            r = mid + 1;
        }
        else
        {
            r = mid;
        }
    }
    if(ling(r)!=n)
    {
        cout<<"-1"<<endl;
    }
    else
    {
        cout<<r<<endl;
    }
    return 0;
}
int ling(long double g)//求多少个0
{
    long double ans=0;
    //Z = N/5 + N /(5*5) + N/(5*5*5)…..直到N/(5的K次方)等于0
    //公式中 N/5表示不大于N的数中能被5整除的数贡献一个5,N/(5*5)表示不大于N的数中能被25整除的数再贡献一个5
    while(g)
    {
        ans += floor(g/5);
        g = floor(g/5);
    }
    return ans;
}
运行结果及报错内容

例如输入2,此时应该输出10,但一直都是输出-1

我的解答思路和尝试过的方法

单独运行求N!后面有几个0的部分没有问题,而二分法应该也没有错误

我想要达到的结果

25=10;
计算2^p
5^q 也就是说计算min(p,q) <=n