Description
Define f (n) as the number of zeros at the end of n!, for example, f (4) = 0, f (5) = 1. Your task is to find the minimum n satisfying f (n) = x for a given value x.
Input
Multiple groups of test data, each group of test data contains a positive integer x (1 < = x < = 10 ^ 8).
Output
For each group of test data, output the corresponding n. if n is not exist, output "No solution"(without quotation).
Sample Input
2
5
Sample Output
10
No solution
HINT
water problem!
代码:
#include<bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f;
int x;
int erfen(int mid){
int sum=0;
while(mid){
sum+=mid/5;
mid/=5;
}
return sum;
}
int main(){
while(~scanf("%d",&x)){
int l=0,r=inf;
int mid,flag=0;
while(l<r){
mid=(l+r)/2;
int w=erfen(mid);
if(w==x){
while(mid%5){
mid--;
}
flag=1;
break;
}
else if(w<x){
l=mid+1;
}
else r=mid-1;
}
if(flag)cout<<mid<<endl;
else cout<<"No solution\n";
}
}