从一道面试题说去 2

简介: 面试题目: 给定一个数n,求1*2*3*...*n 结果中末尾0的个数。1. 我们先看一个特殊的例子,假设n是100的情况下。    根据题目的意思,我们需要求的是1*2*3*...*100的结果中末尾0的个数。


面试题目: 给定一个数n,求1*2*3*...*n 结果中末尾0的个数。


1. 我们先看一个特殊的例子,假设n是100的情况下。

    根据题目的意思,我们需要求的是1*2*3*...*100的结果中末尾0的个数。

    回顾一下小学4年级的数学知识,一个数末尾加一个0,相当于乘上一个10。

    ok,假设有一个能够被10整除的数sum,那么sum = 10*N => 2*5*N。例如 50 = 10*5 = 2*5*5

    好了,通过上面,我们可以发现,10的个数是由2和5的个数,并且有 10的个数 = min(2的个数,5的个数)。

    

    好了,回到题目,假设1*2*3*...*100 的结果是sum,那么sum = 10*N => 2*5*N。

    根据上面的结论,实际上题目是要求结果中10的个数,即2和5的最小的个数。

    

    根据等式,1*2*3*4*...*100,可以发现4、6、8都包含2,因此2的个数比5来的多,因而10的个数决定于5的个数。


2. 要怎么求5的个数呢?

    根据1~100这100个数,能够产生5的有5,10,15,20,25...95,100,并且如果数是5的次方,则包含多个5。

    因此1~100这100个数,总的5的个数 100/5+100/25 = 24. 因此1*2*3*...*100结果包含24个0

     

    扩展到n,1*2*3*...*n的结果中末尾包含0的个数,等价于 n/5 + n/25 + n/125 + ...




目录
相关文章
|
缓存 前端开发 Java
面试题打卡30天-day28
面试题打卡30天-day28
62 1
面试题打卡30天-day28
|
消息中间件 存储 NoSQL
面试题30天打卡-day23
面试题30天打卡-day23
33 0
|
Java 关系型数据库 MySQL
面试题30天打卡-day03
面试题30天打卡-day03
26 0
|
缓存 JavaScript 前端开发
【面试题总结】
【面试题总结】
|
6月前
|
JavaScript 前端开发
面试题总结
面试题总结
30 0
|
消息中间件 分布式计算 NoSQL
面试题30天打卡-day27
面试题30天打卡-day27
65 0
|
存储 Java 数据库连接
面试题30天打卡-day17
面试题30天打卡-day17
33 0
|
NoSQL 前端开发 Java
面试题30天打卡-day12
面试题30天打卡-day12
39 0
|
设计模式 算法 Java
面试题30天打卡-day22
面试题30天打卡-day22
61 0
|
缓存 前端开发 JavaScript
【面试题2】1
【面试题2】