传送门
对于任意一个数,×10就能使它尾部多一个0。分析一下样例,n=5时n!=12345=120,其实就是134(25) = 12 * 10。即,产生一个末尾0的原因是累乘的数里能凑一个“10”出来。那么我们只需要统计相乘的n个数有能凑几个10就行。更进一步简化, 由于10=2*5,且固定的范围内,因子5总是比因子2要少。所以,可以直接统计所有累乘的因子里5的数量。

class Solution {
public:
    int trailingZeroes(int n) {
        if (n == 0) return 0;

        /*
         * 对于任意一个数,×10就能使它尾部多一个0
         * 分析一下样例,n=5时n!=1*2*3*4*5=120,其实就是1*3*4*(2*5) = 12 * 10
         * 即,产生一个末尾0的原因是累乘的数里能凑一个“10”出来
         * 那么我们只需要统计相乘的n个数有能凑几个10就行
         * 更进一步简化, 由于10=2*5,且固定的范围内,因子5总是比因子2要少
         * 所以,可以直接统计所有累乘的因子里5的数量。
         */
        int cnt = 0;
        for (int i = 1; i <= n; i++) {
            int j = i;
            while(j > 0) {
                if (j % 5 == 0) {
                    cnt++;
                    j /= 5;
                } else {
                    break;
                }
            }
        }

        return cnt;
    }
};