C - 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! = 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
AC代码
1 #include<stdio.h> 2 const int MAXN=0x3f3f3f3f;//这个要足够大才能找到10^8 3 int getq(int x){ 4 int q=0; 5 while(x){ 6 q+=x/5; 7 x/=5; 8 } 9 return q; 10 } 11 void erfen(int n){ 12 int l=0,r=MAXN; 13 while(l<=r){ 14 int mid=(l+r)>>1; 15 if(getq(mid)>=n)r=mid-1;//二分这点注意 16 else l=mid+1; 17 } 18 if(getq(l)==n)printf("%d\n",l); 19 else puts("impossible"); 20 } 21 int main(){ 22 int T,Q,flot=0; 23 scanf("%d",&T); 24 while(T--){ 25 scanf("%d",&Q); 26 printf("Case %d: ",++flot); 27 erfen(Q); 28 } 29 return 0; 30 }
永远渴望,大智若愚(stay hungry, stay foolish)