给定一个整数 n ,返回 n! 结果中尾随零的数量。

提示 n! = n * (n - 1) * (n - 2) * … * 3 * 2 * 1

示例 1:

输入:n = 3
输出:0
解释:3! = 6 ,不含尾随 0
示例 2:

输入:n = 5
输出:1
解释:5! = 120 ,有一个尾随 0
示例 3:

输入:n = 0
输出:0

析:

我们把每个乘数再稍微分解下,看一个例子。11! = 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 11 * (2 * 5) * 9 * (4 * 2) * 7 * (3 * 2) * (1 * 5) * (2 * 2) * 3 * (1 * 2) * 1对于含有 2 的因子的话是 1 * 2, 2 * 2, 3 * 2, 4 * 2 ...对于含有 5 的因子的话是 1 * 5, 2 * 5...含有 2 的因子每两个出现一次,含有 5 的因子每 5 个出现一次,所有 2 出现的个数远远多于 5,换言之找到一个 5,一定能找到一个 2 与之配对。所以我们只需要找有多少个 5。直接的,我们只需要判断每个累乘的数有多少个 5 的因子即可。对于一个数的阶乘,就如之前分析的,5 的因子一定是每隔 5 个数出现一次,也就是下边的样子。n! = 1 * 2 * 3 * 4 * (1 * 5) * ... * (2 * 5) * ... * (3 * 5) *... * n因为每隔 5 个数出现一个 5,所以计算出现了多少个 5,我们只需要用 n/5 就可以算出来。但还没有结束,继续分析。... * (1 * 5) * ... * (1 * 5 * 5) * ... * (2 * 5 * 5) * ... * (3 * 5 * 5) * ... * n每隔 25 个数字,出现的是两个 5,所以除了每隔 5 个数算作一个 5,每隔 25 个数,还需要多算一个 5。也就是我们需要再加上 n / 25 个 5。同理我们还会发现每隔 5 * 5 * 5 = 125 个数字,会出现 3 个 5,所以我们还需要再加上 n / 125 。综上,规律就是每隔 5 个数,出现一个 5,每隔 25 个数,出现 2 个 5,每隔 125 个数,出现 3 个 5... 以此类推。最终 5 的个数就是 n / 5 + n / 25 + n / 125 ...写程序的话,如果直接按照上边的式子计算,分母可能会造成溢出。所以算 n / 25 的时候,我们先把 n 更新,n = n / 5,然后再计算 n / 5 即可。后边的同理。

解:

public class Test {public static void main(String[] args) {Test test = new Test();int res = test.trailingZeroes(5);System.out.println(res);}public int trailingZeroes(int n) {int res = 0;while (n > 0) {res += n / 5;n /= 5;}return res;}
}

172. 阶乘后的零。相关推荐

  1. 【LeetCode 172. 阶乘后的零】

    LeetCode 172. 阶乘后的零 题目描述 解题思路 class Solution {public int trailingZeroes(int n) {//思路//计算阶乘后为零的个数 因为2 ...

  2. Leetcode 172. 阶乘后的零 解题思路及C++实现

    解题思路: 找阶乘后的零,本质上是找相乘的因子中5的个数,一般情况中,5的倍数中包含一个因子5,但是5的指数次方如25,就包含了2个因子5,这个要注意. class Solution { public ...

  3. 172. 阶乘后的零

    给定一个整数 n,返回 n! 结果尾数中零的数量. 示例 1: 输入: 3 输出: 0 解释: 3! = 6, 尾数中没有零. 示例 2: 输入: 5 输出: 1 解释: 5! = 120, 尾数中有 ...

  4. 力扣172.阶乘后的零

    题目描述 给定一个整数 n,返回 n! 结果尾数中零的数量. 示例 示例 1:输入: 3 输出: 0 解释: 3! = 6, 尾数中没有零.示例 2:输入: 5 输出: 1 解释: 5! = 120, ...

  5. 【172. 阶乘后的零】

    来源:力扣(LeetCode) 描述: 给定一个整数 n ,返回 n! 结果中尾随零的数量. 提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1 示例 1: ...

  6. LeedCode 172. 阶乘后的零

    一.内容 给定一个整数 n ,返回 n! 结果中尾随零的数量.提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1示例 1:输入:n = 3 输出:0 解释: ...

  7. 【力扣】172. 阶乘后的零

    题目 给定一个整数 n ,返回 n! 结果中尾随零的数量. 提示 n! = n * (n - 1) * (n - 2) * - * 3 * 2 * 1 示例 1: 输入:n = 3 输出:0 解释:3 ...

  8. Leetcode题库 172.阶乘后的零(C实现)

    文章目录 思路 方法1 方法2 代码 方法1 方法2 思路 方法1 末尾每一个0都能看做是一个10 0的数量就转换成n!=123*-n形成的10的数量 每一个10可以看作是25 10的数量就转换成形成 ...

  9. 172. 阶乘后的零 尾随零

    原题如下: 给定一个整数 n ,返回 n! 结果中尾随零的数量. 提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1 0 <= n <= 104 ...

最新文章

  1. vue-cli构建项目
  2. [置顶] ActivityGroup自我堆栈管理(复用现有activity)
  3. 玩点不一样的,如何使用MATLAB实现批量修改文件后缀名,文件名,批量复制文件
  4. Leetcode 之Count and Say(35)
  5. python读取数据库文件的扩展名_Python读取sqlite数据库文件的方法分析
  6. php中队列控制的方法,学习猿地-php 队列的实现方法
  7. 9.6分神作又出续集,这是成年人最不敢直视的现实
  8. HTML progress控件
  9. SolrCloud集群的安装使用以及Zookeeper的介绍
  10. js创建对象,用函数实现对象创建,并实现内函数共享
  11. [收藏] 今天的存储解决方案:直连式存储(DAS)、存储区域网络(SAN)、网络接入存储(NAS)
  12. HTML5如何把圆分成六等分,CSS八等分圆的实现示例_CSS教程_CSS
  13. java 打印 xps_使用Java 将PPT转换为PDF、XPS等格式
  14. version magic 不一致问题
  15. pycharm安装open3d的方法
  16. 洛谷P3398 仓鼠找suger
  17. 《关键对话》思维导图
  18. 极客”一词,来自于美国俚语“geek”的音译,一般理解为性格古怪的人
  19. Linux下Socket编程之TCP Server端
  20. ML之VC维:VC维(Vapnik-Chervonenkis Dimension)理论的概述(衡量模型复杂度和预测能力的指标)的简介、案例理解之详细攻略

热门文章

  1. 在网页中插入flash的方法
  2. 构建基于词典的Lucene分类器
  3. RxSwift序列—Subject
  4. 如何加载3D模型(odj文件和mtl文件)
  5. word2016使用Latex编辑公式
  6. 工作岗位必备技能总结
  7. 图书馆管理信息系统的用例图和类图
  8. linux三种网络模式
  9. Issues:Frequency out of range: (expecting between 112.50Hz and 275.00Hz, measured 99.85Hz)
  10. 谷歌chrome安卓版_谷歌Chrome安卓版测试全新共享界面:二维码和截图来了