找到一个最小的 N, 使得 1×2×3...×N 的末尾恰好有 Q 个 0 输入 第一行输入一个整数 T, 接下来 T 行每行输入一个整数 Q。
T≤10000,1≤Q≤108
思路:二分
代码:
#include<bits/stdc++.h>
using namespace std;
int T;
int q;
inline int five_num(int n){
int c=0;
n/=5;
while(n>0){
c+=n;
n/=5;
}
return c;
}
int main()
{
scanf("%d",&T);
int d=T;
while(T--){
scanf("%d",&q);
bool f=false;
int l=1,r=100000000;
while(r-l>1){
int mid=(l+r)/2;
// cout << mid << endl;
if(five_num(mid)==q){
l=mid;
f=true;
break;
}
if(five_num(mid)<q){
l=mid;
}
if(five_num(mid)>q){
r=mid;
}
}
if(f){
printf("Case %d: %d\n",d-T,l-l%5);
}
else{
printf("Case %d: impossible\n",d-T);
}
}
return 0;
}