C练题笔记之:Leetcode-793. 阶乘函数后 K 个零

2023-11-16

题目:

 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 的条件。
示例 2:

输入:k = 5
输出:0
解释:没有匹配到这样的 x!,符合 k = 5 的条件。
示例 3:

输入: k = 3
输出: 5
 

提示:

0 <= k <= 109

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/preimage-size-of-factorial-zeroes-function
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

结果:

解题思路:

我一开始想要把乘积算出来,然后很快就发现天真了。。。

于是取看了题解,感谢题解中【爪哇缪斯】图解LeetCode 这篇图解,根据他的题解就真的能够明白为什么。——>大佬题解

简单说下题解中的思路:

首先我们要确定的是,乘积是否多一个0出来,取决于5 和 2 组合的个数,(至于为什么。。。我不知道,反正看看规律就是这样)。因为2出现的次数太多,不利于计算,这里用5计算。因此我们乘积中出现多少个0,完全取决于5的个数。

由此可以看出我们出现的5的个数就是0的个数。 

然后5*5, 5*5 * 5这种5的次方的值,因为其本身的值会被5整除,这样可能会误导我们个数的计算,因此这部分需要单独拿出来算1个5.。

 因此这题计算的k 如果存在一个 nums / 5 + nums / 25 + nums / 625 。。。的和,那就存在有k个0存在的场景。

最后,既然是一致计算5的个数,那就很容易明白,我们每5个数会多出至少1个0,所以我们返回的个数只可能是0 和 5.

最后注意:虽然不计算乘积,但是因为要和5做计算,会超出int范围!

代码:

// 由题解可以学习到,其实这道题就是求相乘的数字中出现5和5的倍数的个数
// 因此我们从start到end之间只需要保证5和5的倍数存在的个数和等于k存在那就存在5个。
int preimageSizeFZF(int k){
    long long start = 0;
    long long end = (long long)5 * k;
    while(start <= end) {
        long long sum = 0;
        long long num = 5;
        long long mid = (end - start)/2 + start;
        while (num <= mid) {
            sum += (mid / num); // 当前mid包含5的个数,5的倍数的个数的和。
            num *= 5;
        }
        if (sum == k) {
            // 说明5和5的倍数的个数之和为k,也就是可以存在有k个0存在的场景。
            return 5;
        } else if (sum < k) {
            start = mid + 1;
        } else {
            end = mid - 1;
        }
    }
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C练题笔记之:Leetcode-793. 阶乘函数后 K 个零 的相关文章

随机推荐

  • flink源码阅读---Flink intervalJoin 使用和原理分析

    1 前言 Flink中基于DataStream的join 只能实现在同一个窗口的两个数据流进行join 但是在实际中常常会存在数据乱序或者延时的情况 导致两个流的数据进度不一致 就会出现数据跨窗口的情况 那么数据就无法在同一个窗口内join
  • 主成分分析PCA以及特征值和特征向量的意义

    定义 主成分分析 Principal Component Analysis PCA 是一种统计方法 通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量 转换后的这组变量叫主成分 PCA的思想是将n维特征映射到k维上 k
  • android TextUtils工具类的用法

    方法摘要 static CharSequence 返回一个字符序列 commaEllipsize CharSequence text TextPaint p float avail String oneMore String more Co
  • Windows小技巧7--Sublime Text 3使用总结

    Windows小技巧7 Sublime Text 3使用总结 Sublime Text 是一个代码编辑器 也是HTML和散文先进的文本编辑器 Sublime Text是由程序员Jon Skinner于2008年1月份所开发出来 它最初被设计
  • C++中函数返回引用,及问题

    目录 函数返回值 返回引用 C 基础知识 函数返回引用深度解析 关于函数调用返回引用错误并且每次调用不一致的分析与解决 将引用作为函数返回值的格式 好处和规则 实用经验 45 禁止函数返回局部变量的引用 1 返回的是一个引用类型 也就是返回
  • 整数溢出的漏洞危害和预防

    智能合约作为区块链2 0的代表技术 适应于区块链去中心化 分布式的特点 具有独立运行 不可篡改的优良特性 可用于实现包含金融工具在内的各类分布式应用 开发者可以自行定义交易逻辑并开发代码发布到链上 合约代码在矿工节点的虚拟机环境 如EVM
  • vue踩坑填坑(一):引入模块组件

    在webpack vue开发中 如果在一个vue文件中引入另外一个封装的模块组件的vue文件 则有以下两种方式 首先想要在以下代码中引入一个封装好的输入框组件input text vue
  • cf服务器维护会不会掉分,《cf》枪王排位长时间不打会不会掉分? 枪王排位扣分机制介绍...

    川北在线核心提示 原标题 cf 枪王排位长时间不打会不会掉分 枪王排位扣分机制介绍 CF枪王排位大师以上不打会掉分么 很多小伙伴都在问枪王排位长时间不打会不会掉分 为此牛游戏小编为大家带来cf枪王排位扣分机制介绍 一起来看看枪王排位长时间不
  • Basic Level 1014 福尔摩斯的约会 (20分)

    题目 大侦探福尔摩斯接到一张奇怪的字条 我们约会吧 3485djDkxh4hhGE 2984akDfkkkkggEdsb s hgsfdk d Hyscvnm 大侦探很快就明白了 字条上奇怪的乱码实际上就是约会的时间星期四 14 04 因为
  • JDK8 HashMap put() 方法源码分析

    文章目录 一 前置知识 红黑树定义 二 构造方法 HashMap HashMap int initialCapacity float loadFactor tableSizeFor int cap 计算hashmap初始容量 三 put 方
  • 入门级题解7. 整数反转

    给你一个 32 位的有符号整数 x 返回将 x 中的数字部分反转后的结果 如果反转后整数超过 32 位的有符号整数的范围 231 231 1 就返回 0 假设环境不允许存储 64 位整数 有符号或无符号 思路 反转 想到链表反转 又看到是整
  • android studio对数据库进行,Android Studio 学习(四) 数据库

    文件存储 写数据 String data Data ti save FileOutputStream out null BufferedWriter writer null try out openFileOutput data Conte
  • C++毕业设计基于QT实现的超市收银管理系统源代码+数据库

    C 毕业设计基于QT实现的超市收银管理系统源代码 数据库 编译使用 编译完成后 需要拷贝 file目录下的数据库 POP db文件到可执行程序目录下 登录界面 主界面 会员管理 完整代码下载地址 基于QT实现的超市收银管理系统源代码 数据库
  • ctf.show 通关秘籍

    文章目录 CTF show 1 web签到题 2 web2 3 web3 CTF show 1 web签到题 访问web签到题的地址 发现页面只有 where is flag 字样 使用Fn F12进入调试模式 或者页面空白处点击右键查看网
  • mysql默认的数据库和表_MySQL 自带4个默认数据库

    默认数据库分类 information schema performance schema mysql test informance schema 保存了MySQl服务所有数据库的信息 具体MySQL服务有多少个数据库 各个数据库有哪些表
  • Mrosoft visual c++6.0打开文件未响应,快速解决。【最新办法,初学者都会】

    1 下载filetool的vc6 0的辅助工具 下载地址 http download microsoft com download vc60ent s1 6 0 w9xnt4 en us filetool exe 快速下载filetool
  • 为SQL Server Always On可用性组配置域控制器和Active Directory

    In this series for SQL Server Always On availability groups we are covering end to end configurations for SQL Server 201
  • echarts横向个性化柱状图

    先看一下效果图 横向柱状图 顶部小圈是一个图片 下面我们就来看看如何实现 1 第一步 先把柱状图中需要插入的图片 转换成base64格式 百度搜一下 可以搜到在线工具直接转换 2 html中定义一个div 用来盛放柱状图 div style
  • 《STL源码剖析》(二)——空间配置器

    一 为什么要有空间配置器 1 小块内存带来的内存碎片问题 单从内存分配的角度来讲 由于频繁分配 释放小块内存容易在堆中造成外碎片 极端情况下 堆中空闲的总量满足一个要求 但是这些空闲的块都不连续 导致任何一个单独的空闲的块都无法满足请求 2
  • C练题笔记之:Leetcode-793. 阶乘函数后 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 的