Description
定义f(n)为n!的末尾零的个数,例如f(4)=0,f(5)=1。你的任务是对于一个给定的的值x找出最小的n满足f(n)=x。
Input
多组测试数据,每组测试数据包含一个正整数x(1<=x<=10^8)。
Output
对于每组测试数据输出对应的n,若没有n满足则输出“No solution”。
Sample Input
2
Sample Output
10
解析
思考过可以得出最小的满足条件的数一定是5的倍数,阶乘后面有几个零就是看它有几个5。至于怎么找到这个数,试着可以用二分查找。
代码
#include<stdio.h>
long long Find(long long x)
{
long long ans=0;
while(x)
{
ans+=x/5;
x/=5;
}
return ans;
}
int main()
{
long long n,left,right,mid,m;
while(~scanf("%lld",&n))
{
left=5; right=1000000000000;
int flag=0;
while(left<right)
{
mid=(left+right)/2;
m=Find(mid);
if(m==n)
{
while(mid%5) { mid--; };
flag=1;
break;
}
if(m>n)
right=mid-1;
else
left=mid+1;
}
if(flag)
printf("%lld\n",mid);
else
printf("No solution\n");
}
return 0;
}