前天在做网易笔试题时碰到一道求2016的阶乘有多少个零的选择题,一时被难住了,后来不甘心,就认认真真思考了一番,终于找到了一种很简单的解法。
求N的阶乘后有多少个零的解法如下:
(1)原理说明:5和一个偶数(不考虑偶数0)相乘即可得到一个结果为10的倍数的数值,也就是说,产生了零。在1~ N 中找5,有 多少个5,就有多少个零。
例如,15 = 5 * 3 ,即15有一个·5 ;20 = 5 * 4 ,即20有一个·5;
25 = 5 * 5 ,即25有两个5 ;100 = 5 * 5 * 4 ,即100有两个5 ;
125 = 5 * 5 * 5 ,即125有三个5 ;625 = 5 * 5 * 5 * 5 ,即625有四个5
(2)设5的 x 次方等于m,找到不大于数值N的那个最大的m值,也就确定了x和集合{1,2,3,.......,x}
(3)N 除以 (5的一次方),结果取整,假设为 a1
N 除以 (5的二次方),结果取整,假设为 a2
N 除以 (5的三次方),结果取整,假设为 a3
类似地,直到
N 除以 (5的 x 次方),结果取整,假设为 aX,
则最后的结果为 (a1 + a2 + a3 + ..... + aX) 个零。
下面以2016的阶乘有多少个零 为例:
(1)5的四次方等于 625 <2016 , 5的五次方等于 3125 > 2016
(2)5 1 ~ 2016 中 是5 的倍数的数 有 403 个 (5 * 2 = 10)
25 = 5 * 5 1 ~ 2016 中 是25 的倍数的数 有80 个 (25 * 4 = 100)
125 = 5 * 5 * 51 ~ 2016 中 是125 的倍数的数 有16个 (125 * 8 = 1000)
625 = 5 * 5 * 5 * 5 1 ~ 2016 中 是625 的倍数的数 有3个 (625 * 16 = 10000)
(3)最后的结果为 : 403 + 80 + 16 + 3 = 502 (个)