172. 阶乘后的零
题目描述:
给定一个整数 n
,返回 n!
结果中尾随零的数量。提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1
解题思路:
首先排除将阶乘算出来后再统计尾随零个数的方法,毕竟阶乘的结果很容易就溢出了。实际上,我们从1开始遍历到n,每多乘一个10,尾随零个数就加1,这个“10”哪里来的呢?“10”可以从每个相乘的数中提取出因子2和5来组合而成。以10!为例,10!= 10*9*8*...*2*1 = (2*5)*9*(2*4)*7*(2*3)*(1*5)*(2*2)*3*2*1,可以发现因子2的个数总是比5多,因此要想找有多少个“10”,只需要找“5”的个数即可。在这里,10!中因子“5”只能在数字5和数字10中提取出来,一共2个因子“5”,故尾随零个数为2个。
可以理解为,每5个数中必然有1个因子“5”。但是,例如数字25、50或125等,它们能提取出来的因子“5”不止一个,25=5*5,50=5*5*2,125=5*5*5。那么可以认为,每25个数中必然多出来一个因子“5”,每125个数中必然再多出来一个因子“5”,因此类推。
因此,整数n的阶乘有n个数依次相乘,那么可以去统计每5个数组成一组,每25个数组成一组,每125个数组成一组,每625个数组成一组,分别可以有多少组。例如,n=100,每5个数成组可以有20组,那么就有20个因子“5”,每25个数成组可以有4组,那么就有4*2=8个因子“5”,但要注意,前面每5个一组统计的时候包括了数字25、50、75、100中因子“5”的个数,因此在每25个数一组统计的时候只需要加上额外增加的因子“5”的个数即可(额外增加了4个),因此n=100的时候尾随零应该是20+4个。
代码如下:
var trailingZeroes = function(n) { let ans = 0; while(n>0){ let group = Math.floor(n/5); ans += group; n = n/5; } return ans; };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)