题目链接:
http://lightoj.com/login_main.php?url=volume_showproblem.php?problem=1138
题目大意:现在给你一个N,一个Q,这个Q代表Q!(Q的阶乘),问你这个Q!后面有N个0的最小的Q
思路:首先对于Q!中的数,那么阶乘中的2一定是比5多的,这就保证了有多少个5就有多少个0,后面需要二分枚举,找到合适的值,详情看代码吧
代码:
#include<iostream>
#include<cstdio>
using namespace std;
int sum(int x)
{
int ans = 0;
while(x)
{
ans += x / 5;
x /= 5;
}
return ans;
}
int main()
{
int t,n,kase=1;
cin>>t;
while(t--)
{
scanf("%d",&n);
int l=0,r=10000000000,mid;
int ans=0;
while(l<=r)
{
int mid=(l+r)/2;
int kk=sum(mid);
if(kk==n)
{
ans=mid;
r=mid-1;
}
else if(kk>n)
{
r=mid-1;
}
else l=mid+1;
}
if(!ans)
{
printf("Case %d: impossible\n",kase++);
}
else
{
printf("Case %d: %d\n",kase++,ans);
}
}
return 0;
}