2060: 求阶乘(New Online Judge)
题目描述
满足N!的末尾恰好有K个0的最小的N是多少?
如果这样的N不存在输出-1。
输入
一个整数K。
对于30% 的数据,1≤K≤10^6。
对于100% 的数据,1≤K≤10^18。
输出
一个整数代表答案。
样例输入
样例1
1000000000000000000
样例2
2
样例输出
样例1
4000000000000000020
样例2
10
提示信息
要注意二分答案右边界的设置,本题是==1100: 阶乘末尾0的个数(二)(New Online Judge)==的升级版
题解1(C++版本)
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL INF = 9e18 + 7;
LL k;
LL solve(LL x){
LL sum = 0;
while(x > 0){
sum += x/5;
x /= 5;
}
return sum;
}
bool check(LL x){
LL ans = solve(x);
return ans >= k ? true : false;
}
/*
*/
int main(){
scanf("%lld", &k);
LL L = -1, R = INF, mid;
while(L + 1 < R){
mid = (R + L)/2;
if(check(mid)) R = mid;
else L = mid;
}
if(solve(R) != k) R = -1;
printf("%lld\n", R);
return 0;
}