蓝桥杯真题 求阶乘 二分 找规律 数论

题目地址
在这里插入图片描述


大佬题解

⭐ 二分:从前往后找第一个符合条件的数,那 只要 mid >= k 时,r 都要 = mid
😡 卡常数:多次用到的值 开个变量 存着,避免在条件判断里调用函数

import java.util.Scanner;

public class Main
{

	static long k;

//		计算 x 的阶乘后边有多少个 0
	static long calc(long x)
	{
		long res = 0;
		while (x != 0)
		{
			x /= 5;
			res += x;
		}
		return res;
	}

	public static void main(String[] args)
	{
		Scanner sc = new Scanner(System.in);
		k = sc.nextLong();

//		二分查找答案
		long l = 1;
		long r = Long.MAX_VALUE - 1;

		while (l < r)
		{
			long mid = l + r >> 1;
			long t = calc(mid);
			if (t >= k)
			{
				r = mid;
			} else
			{
				l = mid + 1;
			}
		}

		if (calc(l) != k)
		{
			System.out.println(-1);
		} else
		{
			System.out.println(l);
		}
	}

}

posted @ 2023-04-05 18:03  兑生  阅读(25)  评论(0)    收藏  举报  来源
Live2D