这道题目并不难,只要知道了诀窍其实很容。
阶乘,或者说乘法,为什么会产生0,就是因为有2和5的存在,那么只要对输入n进行分解,有多少个2和有多少5就能知道最后的数中会有多少个0。进一步简化,简单地根据规律就可以知道质因子2的数量肯定是多余质因子5的,因为每出现一个5,就起码在之前出现了两个2,那么这个问题就简化为求输入n的质因子中有多少个5。
解法:
* 每隔5个数,出现一次5,也就是n / 5
* 每隔25个数,额外出现一次5,也是就是n / 25
* 每隔125个数,额外出现一次5,也就是n / 125
* …… 以此类推,所以代码如下:
javapublic class Solution { public int trailingZeroes(int n) { int x = 5; int result = 0; while (n >= x) { result += n / x; if (x > Integer.MAX_VALUE / 5) { break; } x *= 5; } return result; }}