image.png

    统计N!结果中(十进制)末尾有多少个0.

    求末尾0的数量即是统计数因子5的数量。

    1. int numCountZero(int N) {
    2. if (N < 1) return -1;
    3. int num = N;
    4. int count = 0;
    5. while (num != 0) {
    6. num /= 5;
    7. count += num;
    8. }
    9. return count;
    10. }

    image.png
    N!的结果用二进制表示,求最低位的那个1的位置。

    Solution I : 参考google s2中采用bruijn序列的做法,即先(-N!)&(N!)&bruijn序列,参见bruijn Solution II: 如上题,数学观察得出的规律,这里是找因子2的数量。

            int numRightOne(int num) {
                if (num < 1) return -1;
                int count = 0;
                while (num != 0) {
                    num >>= 1;
                    count += num;
                }
                return count;
            }