**
魔法石的诱惑
**
【题目】:
找到最小的自然数N,使N!在十进制下包含Q个零。
输入格式:
一个数Q(0<=Q<=10^8)
输出格式:
如果无解,输出“No,solution”,否则输出N。
输入样例:
2
输出样例:
10
思路:N!单调递增序列,可以考虑二分,判断 N! 有多少个0,N/5+N/(5^2) + N / (5 ^ 3)+…
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
int solve(int n)
{
int ans = 0;
while (n > 0)
{
ans = ans + n / 5;
n = n / 5;
}
return ans;
}
void run()
{
//freopen("rob.in","r",stdin);
//freopen("rob.out","w",stdout);
int Q, i;
scanf("%d", &Q);
int start = 1;
int end = 500000000;
int ans = 500000001;
int mid;
int t;
while (start <= end)//二分查找
{
int mid = (end - start) / 2 + start;
int t = solve(mid);
if (t == Q && mid < ans)
ans = mid;
if (t > Q)
end = mid - 1;
else if ( t < Q )
start = mid + 1;
else
end = mid - 1;
}
if (ans != 500000001)
printf("%d\n", ans);
else
printf("No solution\n");
}
int main()
{
run();
return 0;
}