问题遇到的现象和发生背景
在练习过程中看到了这个
满足 N! 的末尾恰好有 K 个 0 的最小的 N 是多少?
如果这样的 N 不存在输出 −1。
问题相关代码,请勿粘贴截图
#include<stdio.h>
#include<math.h>
int ling(long double g);
int erfen(int m);
int main()
{
int n;
long double q=0;
scanf("%d",&n);
q=erfen(n);
}
int erfen(int m)//通过二分法来寻找尾数中有m个0的数
{
long double r=0,l=pow(10,19),mid,i;
int d;
while(r<l)
{
mid=(r+l)/2;
d=ling(mid);
if (m <= d)
{
l = mid - 1;
}
else if(m>d)
{
r = mid + 1;
}
else
{
r=mid;
}
}
if(ling(r)!=m)
{
printf("-1");
}
else
{
printf("%lf",r);
}
}
int ling(long double g)//求多少个0
{//应该是双精度除法不像整型除法一样导致的结果错误
double long e=0;
while(g!=0)
{
e=e+g/5;//记录有多少个5,一个5即代表一个0
g=g/5;
}
return e;
}
我的解答思路和尝试过的方法
https://blog.csdn.net/qq_53767869/article/details/124480854?ops_request_misc=&request_id=&biz_id=102&utm_term=%E8%93%9D%E6%A1%A5%E5%8D%81%E4%B8%89%E7%9C%81%E8%B5%9Bj&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-124480854.142^v10^pc_search_result_control_group,157^v4^control&spm=1018.2226.3001.4187
上述代码是根据这位up的代码改编的c++版本,感觉他的思路是相当简洁所以想改编试试