Description
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
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
题意:问是否有满足后面q个数都是0的阶层,满足输出该数,不满足输出impossible
思路:在阶层中,只有2*5才可以得到尾数0,所以计算阶层里有多少个5就可以了。比如50! 50/5=10,这里有十个5,但是每五个5,比如说第五个5是25可以拆分成5*5,所以还需要10/5=2,加在一起总共12个0.所以尾数0只可能有1、2、3、4、6、7、8、9、10、12…………个这时可以用二分解,找到尾数为0最接近q的数,判断是否为q,不是则没有,是则输出该阶层的数。
代码:
#include <cstdio>
int q,n;
long long z0 (long long n)
{
long long cnt=0;
while (n)
{
cnt+=n/5;
n/=5;
}
return cnt;
}
int main ()
{
int T;
scanf("%d",&T);
for (int i=1;i<=T;i++)
{
scanf("%d",&q);
long long l=4,r=400000016;
long long mid;
while (l<=r)
{
mid=(l+r)/2;
if (z0(mid)>=q)
r=mid-1;
else
l=mid+1;
}
if (z0(l)!=q)
printf("Case %d: impossible\n",i);
else
printf("Case %d: %lld\n",i,l);
}
return 0;
}