## Trailing Zeroes (III) ##*
(注意题中让求的是末尾连续0的个数为Q,不是数中包括的所有0的个数)*
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.
你的任务是找到最小的自然数N,那么N!在十进制记数法中包含精确的Q零。正如你所知道的N != 1 * 2 … N。例如,5 != 120, 120包含了1个0。
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.
输入从一个整数T(≤10000),表示测试用例的数量。
每个案例都包含一个整数Q Q
(1≤≤108)
(
1
≤≤
10
8
)
。
Output
For each case, print the case number and N. If no solution is found then print ‘impossible’.
对于每个案例,打印案例编号和n。如果没有找到解决方案,则打印“不可能”。
Sample Input
3
1
2
5
Sample Output
Case 1: 5
Case 2: 10
Case 3: impossible
关键部分:
ll num(ll b)
{ ll ans=0;
while(b)
{ ans+=b/5;
b/=5;
}
return ans;
}
#include<stdio.h>
#include<cstdio>
#include<string>
#include<string.h>
#include<queue>
#include<stack>
#include<vector>
typedef long long ll;
using namespace std;
ll num(ll b)
{ ll ans=0;
while(b)
{ ans+=b/5;
b/=5;
}
return ans;
}
int main()
{
ll n,ans;
int k=0;
ll Q;
scanf("%lld",&n);
while(n--)
{ k++;
scanf("%lld",&Q);
ll l=1;
ll ans=0;
ll r=1000000000000;
while(l<=r)
{
ll mid=(l+r)/2;
if(num(mid)==Q)
{
ans=mid;
r=mid-1;
}
else if(num(mid)>Q)
{
r=mid-1;
}
else
l=mid+1;
}
if(ans)
printf("Case %d: %lld\n",k,ans);
else
printf("Case %d: impossible\n",k);
}
return 0;
}