描述
设计一个算法,计算出n阶乘中尾部零的个数
您在真实的面试中是否遇到过这个题?
是
样例
11! = 39916800,因此应该返回 2
挑战
O(logN)的时间复杂度
首先考虑尾部产生0的原因,每当遇到含有因子5和2的时候就会产生,所以只需要考虑出现因子5的次数,1*5 2*5 3*5 4*5 5*5......5*5*5....5*5*5*5... 所以阶乘数不停的除5得到这一轮5的因子数目。
要想得到O(logn)的时间复杂度,需要每次循环对比上次数目减少。
class Solution { public: /* * @param n: A long integer * @return: An integer, denote the number of trailing zeros in n! */ long long trailingZeros(long long n) { // write your code here, try to do it without arithmetic operators. long count = 0; long temp=n/5; while (temp!=0) { count+=temp; temp/=5; } return count; } };