结尾0个数是看2和5的最小个数,阶乘中2的个数比5多很多。所以看5的个数。二分枚举。
注意n/5是 5 的个数, n/25 是 25 的个数 ....
例如 39/5 = 7 7/5 = 1 则 ans = 7+1=8.
7是包含 5,10,15,20,25,30,35 7个5
1是 25 包含 1 一个 5
//
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll search(ll n){
ll ans =0;
while(n>0){
ans+=(n/5);
n/=5;
}
return ans;
}
int main()
{
ll n,t,cnt=1;
ll l,r,mid,ans;
scanf("%lld",&t);
while(t--){
scanf("%lld",&n);
l = 1,r = 1e9;ans = 0;
while(l<=r){
mid = (l+r)>>1;
if(search(mid)==n){
ans = mid;
r = mid - 1;
}
else if(search(mid)<n)
l = mid+1;
else r = mid-1;
}
printf("Case %lld: ",cnt++);
if(ans>0)
printf("%lld\n",ans);
else printf("impossible\n");
}
return 0;
}