1100: 阶乘末尾0的个数(二)(java)

题目描述
相信你已经熟练掌握N!末尾的0的个数的求法。
现在给出数字Q,请找到最小的N,使得N!末尾恰好有Q个0
输入
输入一个整数Q(1<=Q<=10^8)
输出
如果无解,输出"No solution",否则输出 N 。
样例输入
2
样例输出
10
思路:使用二分法。求n!末尾0的个数可以看
https://blog.csdn.net/lby666888/article/details/121493100?spm=1001.2014.3001.5501
代码如下

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        long left=1;
        long right=10000000;
        long ans=0;
        int Q = sc.nextInt();
        while (right>=left){
            int mid=(int)(right+left)>>1;
            if(countfive(mid)==Q){
                ans=mid;
                right=mid-1;
            }else if(countfive(mid) > Q)
                right = mid - 1;
            else
                left = mid + 1;
        }
        if(ans!=0){
            System.out.println(ans);
        }else {
            System.out.println("No solution");
        }
    }
    private static int countfive(int n) {
        return (n<5)?0:n/5+countfive(n/5);
    }
}

你可能感兴趣的:(algorithm,算法,java)