Factorial Trailing Zeroes

这道题目并不难,只要知道了诀窍其实很容。

阶乘,或者说乘法,为什么会产生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;
    }
}

findingea
1.1k 声望64 粉丝