此题遇过多遍
#include<bits/stdc++.h>
using namespace std;
long long facs(long long n)
{
long long num=0;
long long b=1;
while(1)
{
b*=5;
num+=n/b;
if(b>n)
break;
}
return num;
}
int main()
{
long long p,i;
int flag;
while(~scanf("%lld",&p))
{
flag=0;
long long left=5;
long long right=10000000000;
while(left<right)
{
long long mid=(left+right)/2;
long long q=facs(mid);
if(q==p)
{
while(mid%5!=0)
mid--;
printf("%lld\n",mid);
flag=1;
break;
}
if(q>p)
right=mid-1;
else
left=mid+1;
}
if(flag==0)
printf("No solution\n");
}
return 0;
}
二分法求解,一定要记住