You task is to find minimal natural number N, so that N! contains exactly Q zeroes on the trail in decimal notation.
As you know N! = 1*2*...*N. For example, 5! = 120, 120 contains one zero on the trail.
Input
Input starts with an integer T (≤ 10000), denoting the number of test cases.
Each case contains an integer Q (1 ≤ Q ≤ 108) in a line.
Output
For each case, print the case number and N. If no solution is found then print 'impossible'.
Sample Input
3
1
2
5
Sample Output
Case 1: 5
Case 2: 10
Case 3: impossible
题意:求满足情况的阶乘末尾0的个数。
解题思路:5的个数即使0的个数;统级一个数有多少个5构成。///利用二分查找到最小的值
#include<iostream>
#include<algorithm>
using namespace std;
int solve(int n) //统计0的个数
{
int sum=0;
while(n)
{
sum+=n/5;
n=n/5;
}
return sum;
}
int er(int n)
{
int l=0,r=500000000;
while(l<=r)
{
int mid=(l+r)>>1;
if(solve(mid)<n)
l=mid+1;
else
r=mid-1;
}
if(solve(l)==n)
return l;
return 0;
}
int main()
{
int t,k=0;
cin>>t;
while(t--)
{
int n;
cin>>n;
if(!er(n))
cout<<"Case "<<++k<<": impossible"<<endl;
else
cout<<"Case "<<++k<<": "<<er(n)<<endl;
}
return 0;
}