题目:trailingZeros
要求:设计一个算法,计算出n阶乘中尾部零的个数
样例
11! = 39916800,因此应该返回 2
算法要求:O(logN)的时间复杂度
解题思路:因为在10进制中,要想数的结尾有0,只有乘以10才可以。将n分解质因数,可以得到5和2,只需要找到有几个5,几个2就可以,因为2的个数比5多,只需要找到有几个5即可(注意这里的2和5为质因数)。
算法如下:
class Solution {
public:
long long trailingZeros(long long n) {
long long m = 5;
long long count = 0;
while (m < n) {
count += n/m;
m*=5;
}
return count;
}
};