172. Factorial Trailing Zeroes

原文题目:

172. Factorial Trailing Zeroes

读题:

求n!的末尾有多少个0。说实话,第一次看到这个题,有点懵,由于需要在O(logn)的复杂度内,当然不能去把n!计算出来,然后仔细想想,末尾0是哪里来的?只有当2*5时才会产生一个0,而在1-n中,2的个数明显要多于5的个数,因为2,4,6,8都含有2,所以只要找到5的个数就行了,但是同样的,比如25是包含5*5两个5的,同样的5^3,5^4也一样,所以还需要判断n/5之后没有没5,一直除以5一直到值为0为止。

采用递归方法,一行代码就搞定了

class Solution {
public:
    int trailingZeroes(int n) {
        return n == 0 ? 0 : n / 5 + trailingZeroes(n / 5);
    }
};

  

原文地址:https://www.cnblogs.com/xqn2017/p/8006806.html