链接:LightOJ - 1138 Trailing Zeroes (III)
题意:
共 组测试数据,每组数据给出一个 ,要求出最小的正整数 ,使得 的末尾恰有 个
分析:
末尾有多少个 取决于其因数有多少个 ,也就是说取决于质因数有多少 和 ;
对于 ,质因数 的个数肯定是大于 的个数的,所以只需要 找 的质因数分解有多少个 ,那么就等于
寻找最小的 只需要二分,若 MID 中 的个数 ,则往大的找,否则尽量往小的找,最后一个 满足 的个数 的既是答案。
以下代码:
#include<bits/stdc++.h>
using namespace std;
int cal(int x) //计算x!中5的个数
{
if(x==0)
return 0;
return x/5+cal(x/5);
}
int main()
{
int T,Q,kase=0;
scanf("%d",&T);
while(T--)
{
scanf("%d",&Q);
int ans=0,temp;
int L=1,R=5e8,MID;
while(L<=R)
{
MID=(L+R)>>1;
temp=cal(MID);
if(temp==Q)
{
ans=MID;
R=MID-1;
}
else if(temp>Q)
R=MID-1;
else
L=MID+1;
}
if(ans)
printf("Case %d: %d\n",++kase,ans);
else
printf("Case %d: impossible\n",++kase,ans);
}
return 0;
}