Suffix Zeroes

Problem:Suffix Zeroes

Description:
这个游戏超休闲的~。现在你需要找一个自然数n,你找的自然数需要满足n!的末尾恰好有k个0(当然我们都是十进制下的数,n! = 123*…*n)。比如:5!= 120,尾部恰好有一个0。

Input:
先输入T,代表有T组数据(T ≤10000)
接下来的T行每一行都包括一个数字k(1≤k≤108)。具体含义请见题意。

Output:
如果能找到这样的数,请输出满足条件的最小的自然数n,如果不存在这样的自然数,请输出impossible。

Sample Input:
2
1
5

Sample Output:
Case 1: 5
Case 2: impossible

Language:C++

#include 

using namespace std;

int k,ans;
int total_five;
int factor_five[30];

void assignment()
{
  factor_five[0]=5;
  total_five=1;
  for(int i=1;factor_five[i-1]*5<1e9;i++)
  {
    factor_five[i]=factor_five[i-1]*5;
    total_five++;
  }
}

void solve()
{
  ans=-1;
  int left=5,right=5e8;
  while(left<=right)
  {
    int x=(left+right)/2;

    int cnt=0;
    for(int i=0;i<total_five;i++) cnt+=x/factor_five[i];

    if(cnt==k)
    {
      ans=x;
      right=x-1;
    }
    else if(cnt<k)  left=x+1;
    else  right=x-1;
  }
}

int main()
{
  int T;
  cin>>T;
  for(int Case=1;Case<=T;Case++)
  {
    cin>>k;

    assignment();
    solve();

    cout<<"Case "<<Case<<": ";
    if(ans==-1) cout<<"impossible"<<endl;
    else cout<<ans<<endl;
  }
  return 0;
}

你可能感兴趣的:(Suffix Zeroes)