算法-阶乘函数后K个零

题目

f(x) 是 x! 末尾是 0 的数量。回想一下 x! = 1 * 2 * 3 * ... * x,且 0! = 1 。

  • 例如, f(3) = 0 ,因为 3! = 6 的末尾没有 0 ;而 f(11) = 2 ,因为 11!= 39916800 末端有 2 个 0 。

给定 k,找出返回能满足 f(x) = k 的非负整数 x 的数量。

示例 1:

复制代码
输入:k = 0
输出:5
解释:0!, 1!, 2!, 3!, 和 4! 均符合 k = 0 的条件。

题解

题解需要的相关结论

1、要想产生0,就需要有2和5,2*5就会得到0,像10,100等都可以拆成多个2和5相乘

2、阶乘中2的数量远远多于5的数量,以10以内的数字为例,2,4,6,8都有2,5却只有一个

3、想要有K个0,可以在5*K的范围内查找即可,因为5*k表示的数的阶乘,5的数量>=k

4、如果一个数n包含的5的数量正好是K个,那么n+1,n+2,n+3,n+4,这4个数包含的5的数量也是K个。加上n这个数就是5个数,小于n的数,不够k个5,大于等于n+5的数,5的数量大于k个

题解思路:二分查找

java 复制代码
class Solution {
    public int preimageSizeFZF(int k) {
        long start = 0L, end = 5L * k, mid;
        while(end >= start) {
            mid = start + (end - start) / 2;
            long n = 5L, nums = 0L;
            //循环计算包含5的个数,25包含两个5,125包含3个5,一此类推
            while (n <= mid) {
                nums += mid / n;
                n *= 5;
            }
            if (nums == k) return 5;
            if (nums < k) start = mid + 1;
            else end = mid - 1;
        }
        return 0;
    }
}
相关推荐
dialect_3 小时前
KMP算法
开发语言·c++·算法
reikocao3 小时前
卡尔曼滤波的动态机制:P如何改变融合权重
算法
漂流瓶jz4 小时前
UVA-1612 猜名次 题解答案代码 算法竞赛入门经典第二版
数据结构·算法·题解·排序·aoapc·算法竞赛入门经典
吞下星星的少年·-·4 小时前
Div.2 CF 1130B题(构造,贪心)
算法·贪心·构造
是main不是漫6 小时前
【双指针——移动零】数组划分类题目的入门基石
c++·算法
深圳市快瞳科技有限公司7 小时前
野外鸟类AI识别落地实录:输入适配、结构化输出、去重聚合与置信度分流的工程实践
算法·计算机视觉·鸟类识别·鸟类ai识别·野外鸟类观测·林业调查
专注仿真8 小时前
梯度提升类(XFBoost)算法详解与代码实例
开发语言·人工智能·python·算法·大模型训练·控制算法
小豆庄8 小时前
视频遮罩追踪退场后ID撞号的排查—多目标场景下的失效
opencv·算法·bug·视频·python3.11
Tisfy9 小时前
LeetCode 3882.网格图中最小异或路径:动态规划
算法·leetcode·动态规划
D e re k ZH10 小时前
P5025 [SNOI2017] 炸弹
c++·算法