LightOJ 1138(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.
OutputFor each case, print the case number and N. If no solution is found then print 'impossible'.
Sample Input3
1
2
5
Sample OutputCase 1: 5
Case 2: 10
Case 3: impossible
分析:1到N的阶乘结尾所含的0的数目依次增大(不减),可以用二分法。
#include<cstdio> int f(int n) { int ans=0; while(n) { ans+=n/5; n/=5; } return ans; } int main() { int T,cas=0,Q; scanf("%d",&T); while(T--) { scanf("%d",&Q); int l=5,r=400000015; while(l<r) { int mid=(l+r)>>1; if(f(mid)>=Q) r=mid; else l=mid+1; } if(f(l)==Q) printf("Case %d: %d\n",++cas,l); else printf("Case %d: impossible\n",++cas); } return 0; }
作者:ACRykl —— O ever youthful,O ever weeping!
出处:http://www.cnblogs.com/ACRykl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。