Trailing Zeroes (III)
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! = 12…*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
也是原题。。。
每阶乘一个5就会多一个零,每阶乘5^n就会多n个零
先定义一个很大的范围(二分法32次就可以达到1e9)然后不断地用中值判定
#include<iostream>
#include<algorithm>
using namespace std;
int trailingzeroes(int n){
if(n<=0) return 0;
int num=0;
while(n){
num+=(n/5);
n/=5;
}
return num;
}
int main(){
int t;
cin>>t;
for(int d=1;d<=t;d++){
int n;
cin>>n;
int flag=0;
int i;
int l=0,r=1e10,mid;
while(l<=r){
mid=(l+r)/2;
int ans=trailingzeroes(mid);
if(ans==n&&mid%5==0){
flag=1;
break;
}
else if(ans<n) l=mid+1;
else r=mid-1;
}
//cout<<n<<" "<<i<<endl;
//cout<<trailingzeroes(n)<<" "<<trailingzeroes(i)<<endl;
if(!flag){
cout<<"Case "<<d<<": "<<"impossible"<<endl;
}
else cout<<"Case "<<d<<": "<<mid<<endl;
}
return 0;
}