一、问题描述

设计一个算法,算出 n 阶乘有多少个尾随零。

示例 1: 输入: 3   输出: 0   解释: 3! = 6, 尾数中没有零。

示例 2:  输入: 5   输出: 1   解释: 5! = 120, 尾数中有 1 个零.

说明: 你算法的时间复杂度应为 O(log n) 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/factorial-zeros-lcci

二、题目分析

题目要求时间复杂度为O(log n),因此不能使用循环求出阶乘在统计尾数0的个数。

分析可知,一个数的末尾的0是由10构造出来的(只有当末尾是10时才会产生进位,并在末尾留下一个0),而10可以分解成2*5,因此求n的阶乘中末尾0的个数就是求1~n中2*5的个数;其他任何可以产生0的组合都可以分解成2*5,例如4*5也可以产生一个末尾的0,而4*5可以分解成2*(2*5);根据上边两条可以知道,我们实际要求的是可以产生2*5的对数;普通的5的倍数,只可以产生一个*5,例如30=5*6,而特殊的25=5*5可以产生两个*5,125=5*5*5可以产生三个*5;因此,本题可以转换为求能产生2*5的质因数的个数,例如1*2*3*4*5*6*7*8可以产生一个2*5,因此8的阶乘尾数中含有1个0;又因为,质因数2的个数一定比质因数5的个数多,因此本题可以直接转换成求质因数5的个数。

三、代码描述

class Solution {
public:int trailingZeroes(int n) {//只有当遇到25、125这样的数时,需要考虑这些数中含有多个质因数5//经过分析我们可以发现,当一个数除5后的结果在这整除5后的结果如果为0,说明这个数在[0,24],当第二次除5后的结果是1说明这个数在[25,124],依次类推,可以写出如下代码int ret = 0;while(n){ret += n/5;n /= 5;    }              return ret;       }
};

leetcode---阶乘尾数相关推荐

  1. 1083: 阶乘尾数零的个数

    时间限制 : 1.000 sec  内存限制 : 128 MB 题目描述 阶乘是基斯顿·卡曼(Christian Kramp, 1760-1826)于1808年发明的运算符号,是数学术语.正整数阶乘指 ...

  2. 程序员面试金典 - 面试题 16.05. 阶乘尾数(5的因子)

    1. 题目 设计一个算法,算出 n 阶乘有多少个尾随零. 示例 1: 输入: 3 输出: 0 解释: 3! = 6, 尾数中没有零.示例 2: 输入: 5 输出: 1 解释: 5! = 120, 尾数 ...

  3. 力扣面试题16.05.阶乘尾数

    题目描述 设计一个算法,算出 n 阶乘有多少个尾随零. 示 例 示例 1:输入: 3 输出: 0 解释: 3! = 6, 尾数中没有零.示例 2:输入: 5 输出: 1 解释: 5! = 120, 尾 ...

  4. javaScript 阶乘尾数

    设计一个算法,算出 n 阶乘有多少个尾随零. 示例 1: 输入: 3 输出: 0 解释: 3! = 6, 尾数中没有零. /*** @param {number} n* @return {number ...

  5. 算法-阶乘尾数零的个数

    输入一个正整数n,求其阶乘位数0的个数,比如n为10,输出2,n为100,输出24. #include <stdio.h> #include <stdlib.h> void m ...

  6. 求n阶乘尾数中有多少个零

    方法1:暴力解 求出n的阶乘,并将该结果通过一次while循环判断,若n%10==0,count++,并将n/=10,退出循环后返回count的值即可.这种方式虽然容易理解,但对于较大的n而言,求出阶 ...

  7. 力扣刷题-阶乘尾数有多少个0

    设计一个算法,算出 n 阶乘有多少个尾随零. 你算法的时间复杂度应为 O(log n) . 显然,暴力是不符合题意的,效率为o(n)所以pass掉暴力,然后我开始也没想出来,查了会资料,结果发现几乎所 ...

  8. LeetCode 793. 阶乘函数后K个零(二分查找)

    1. 题目 f(x) 是 x! 末尾是0的数量.(回想一下 x! = 1 * 2 * 3 * ... * x,且0! = 1) 例如, f(3) = 0 ,因为3! = 6的末尾没有0:而 f(11) ...

  9. C#LeetCode刷题-程序员面试金典

    本文由 比特飞 原创发布,欢迎大家踊跃转载. 转载请注明本文地址:C#LeetCode刷题-程序员面试金典 | .Net中文网. C#LEETCODE刷题概述 概述 所有LeetCode程序员面试金典 ...

最新文章

  1. 算法之【仿竖式算法】
  2. linux mrtg 进程名称,Linux上的MRTG流量监控中心
  3. 微信小程序跳转页面后onload中获取到的参数值和跳转页面时传的参数不一样
  4. 谷歌浏览器书签栏怎么隐藏 谷歌Chrome浏览器书签栏隐藏教程
  5. 《UG NX8.0中文版完全自学手册》一2.4 布局
  6. 小米手机 - Charles无法安装证书 因为无法读取证书
  7. 车轮轴承行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  8. 服务器来电后自动开机|xfs文进系统备份恢复linux下误删除的文件
  9. Atitit 可读性技术与实践范例 艾提拉著 目录 1. 提升可读性的技术类 2 1.1. 本地化命名封装 2 1.2. 表格映射表代替选择 2 1.3. 1.2. Dsl 提升抽象到dsl级别 2
  10. JavaAPI在线帮助文档
  11. 关于 车机U盘音乐歌曲名显示乱码bug 的解决方法
  12. 鹏保宝 v7.1.0 官方版
  13. JavaSE数组基础练习题
  14. 导出chrome扩展插件,crx文件
  15. 高考放榜季 | 知道创宇全方位保障教育政务网站安全可用
  16. margin失效问题——嵌套块元素引起的外边距坍塌
  17. 解决麒麟系统安装mysql后登录错误:‘Access denied for user ‘root‘@‘localhost‘
  18. Flink触发器Triggers
  19. 数字人民币智能合约的一个颠覆式创新应用
  20. Linux下退出vi编辑模式

热门文章

  1. Password / Word lists
  2. uinty中对于物体颜色循环往复
  3. 混得不好,就别去思考!
  4. 修道士和野人java_修道士与野人问题(BFS广度搜索)
  5. 自动化测试框架如果都总结成这样,人人都能学好
  6. 普洱茶保健功效[降脂、减肥、降压、抗动脉硬化 防癌、抗癌 养胃、护胃 消炎、杀菌、治痢]
  7. linux内核 猪头 作用,Linux内核驱动之一些重要数据结构
  8. ubuntu离线安装wireshark
  9. ERP之替代料的使用
  10. 从删除到坐牢,这个锅背不动