E - Trailing Zeroes (III)
https://vjudge.net/contest/241732#problem/E
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
题意:给个n,让你找哪个数的阶乘末尾有n个0
二分法加上判断谁的阶乘后面有n个0这个函数,如何求谁的阶乘后面有n个0好像是数学上一个固定的知识点,可以搜一搜
代码:
#include <stdio.h>
#include <iostream>
using namespace std;
int zero(int x)
{
int count=0;
while(x)
{
count=count+x/5;
x=x/5;
}
return count;
}
int find(int q)
{
long long left=0,right=1000000000000,mid;
while(left<=right)
{
mid=(left+right)>>1;
if(zero(mid)>=q)
right=mid-1;
else
left=mid+1;
}
if(zero(left)==q)
printf("%d\n",left);
else
printf("impossible\n");
return 0;
}
int main()
{
int t,k=0;
cin>>t;
while(t--)
{
k++;
int q;
cin>>q;
printf("Case %d: ",k);
find(q);
}
return 0;
}