SGU154——Factorial (poj1401变形题——数论+二分)

来源:互联网 发布:sadp软件怎么用 编辑:程序博客网 时间:2024/06/06 04:48

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
 
 
 
 
题目描述:输入一个数n、求某个数的阶乘后面有n个0的数p;
 
会了poj1401就好办了、直接来个二分搜素。
 
 
 
#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 0x7fffffffusing 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;}

[submit]
[forum]