Light OJ:1138 Trailing Zeroes (III)(二分)
2016-04-24 22:25
525 查看
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.
Each case contains an integer Q (1 ≤ Q ≤ 108) in a line.
题意:给你一个数q,求一个数n,使得n!末尾有q个0,如果不存在输出impossible。
解题思路:用二分扫一个大区间,最后确定一个数的阶乘末位为q个0,。而计算一个数的阶乘末尾0的个数,这个阶乘的式子中,每含一个5,结果就会在末尾多增加一个0。
PDF (English) | Statistics | Forum |
Time Limit: 2 second(s) | Memory Limit: 32 MB |
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 | Output for Sample Input |
3 1 2 5 | Case 1: 5 Case 2: 10 Case 3: impossible |
解题思路:用二分扫一个大区间,最后确定一个数的阶乘末位为q个0,。而计算一个数的阶乘末尾0的个数,这个阶乘的式子中,每含一个5,结果就会在末尾多增加一个0。
#include <stdio.h> long long judge(long long x)//计算x!后面含有多少个0 { long long cnt=0; while(x) { cnt=cnt+x/5; x=x/5; } return cnt; } int main() { int t; scanf("%d",&t); int cnt=1; while(t--) { long long q; scanf("%lld",&q); long long l=0,r=500000000;//右区间必须得开大,开100000000的时候都过不了。。。 long long mid; long long ans; while(r>=l)//二分经典模板 { mid=(l+r)/2; if(judge(mid)>=q) { ans=mid; r=mid-1; } else { l=mid+1; } } if(judge(ans)!=q)//注意是judge(ans)而不是ans,因为ans是个数字,而judge(ans)才是ans!后面的0的个数 { printf("Case %d: impossible\n",cnt); cnt++; } else { printf("Case %d: %lld\n",cnt,ans); cnt++; } } return 0; }
相关文章推荐
- 快速排序里的学问:从猜数字开始
- HDU 4898 The Revenge of the Princess’ Knight ( 2014 Multi-University Training Contest 4 )
- Search Insert Position,Search for a Range,Pow(x, n),Sqrt(x)
- Find Minimum in Rotated Sorted Array II
- [LeetCode] Sqrt(x)
- [LeetCode] Pow(x, n)
- [LeetCode] Search Insert Position
- [LeetCode] Search for a Range
- [LeetCode] Search in Rotated Sorted Array
- PAT 1057 Stack (30)
- int sqrt(int x)
- Pow(x, n)
- Find Minimum in Rotated Sorted Array
- Divide Two Integers
- 信息竞赛学习笔记:POJ3579中位数(二分)
- acm解题报告 HDU 2141 Can you find it?
- acm解题报告 HDU 2199 Can you solve this equation?
- acm解题报告 HDU 2899 Strange fuction
- acm解题报告 HDU 1969 Pie
- acm解题报告 HDU 1061 Rightmost Digit