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,因为2的个数肯定够用,就看5的个数,能凑出来几个10。。。
找5的时候有个小模板:
LL sum(LL n){
LL ans=0;
while(n){
ans+=n/5;
n/=5;
}
return ans;
}
代码:
#include<iostream>
using namespace std;
#define LL long long
LL sum(LL n){
LL ans=0;
while(n){
ans+=n/5;
n/=5;
}
return ans;
}
int main()
{
int n,m,k=1;
cin>>n;
while(n--){
cin>>m;
LL ans=0;
LL l=0,r=m*5;//不用每次都从1e8开始缩小,要找的数不会超过m*5;
while(l<=r){
int mid=(l+r)>>1;
if(sum(mid)==m){
ans=mid;
r=mid-1;//找最小的,尽量向左靠
}else if(sum(mid)<m){
l=mid+1;
}else{
r=mid-1;
}
}
cout<<"Case "<<k++<<": ";
if(ans){
cout<<ans<<endl;
}else{
cout<<"impossible\n";
}
}
return 0;
}