# SGU154——Factorial （poj1401变形题——数论+二分）

#### 154. Factorial

time limit per test: 0.5 sec.
memory limit per test: 4096 KB
input: standard input
output: standard output

You task is to find minimal natural number N, so that N! contains exactly Q zeroes on the trail in decimal notation. As you know N! = 1*2*...*N. For example, 5! = 120, 120 contains one zero on the trail.

Input
One number Q written in the input (0<=Q<=10^8).

Output
Write "No solution", if there is no such number N, and N otherwise.

Sample test(s)

Input

2
Output

10

#include<iostream>
#include<string.h>
#include<stdio.h>
#include<ctype.h>
#include<algorithm>
#include<stack>
#include<queue>
#include<set>
#include<math.h>
#include<vector>
#include<map>
#include<deque>
#include<list>
#define N 0x7fffffff
using namespace std;
int num0(int n)
{
int count=0;
while(n)
{
count+=n/5;
n/=5;
}
return count;
}
void find(int w)
{
int left=0,right=N,mid;
while(left<=right)
{
mid=(left+right)>>1;//位运算速度快
//        mid=(left+right)/2;
if(num0(mid)>=w)
right=mid-1;
else
left=mid+1;
}
if(num0(left)==w)
printf("%d\n",left);
else
puts("No solution");
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
if(n==0)
printf("1\n");
else
{
find(n);
}
}
return 0;
}


• 本文已收录于以下专栏：

举报原因： 您举报文章：SGU154——Factorial （poj1401变形题——数论+二分） 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)