给出一个数k,求最小的n,使得n的阶乘后面0的数量>=k。
例如k=1,
5的阶乘 = 12345 = 120,120后面有1个0。并且4的阶乘后面没有0,所以5是最小的结果。
输入
一个数k(1 <= k <= 10^9)
输出
输出最小的满足条件的n。
输入样例
1
输出样例
5
题解来源
我先找到规律发现
1 5
2 10
3 15
4 20
5 25
6 25
…
…
可发现如何求X!后面有几个0
且X<=5*n;
但是如何二分的我还不是很清楚,就先大致了解下,以后知道再补原因吧
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll judge(ll x)//求X!后面有几个0
{
ll ans=0;
while(x)
{
x/=5;
ans+=x;
}
return ans;
}
int main()
{
ll n,l,r,mid;
cin>>n;
l=1;r=5*n;//所求x肯定<=5*n
for(int i=0;i<33;i++)//好像知道咋回事又不是很清楚,这里保留解释
{
mid=(l+r)/2;
if(judge(mid)>=n)
r=mid;
else
l=mid+1;
}
cout<<mid;
return 0;
}