Factorial Trailing Zeroes

Factorial Trailing Zeroes

问题:

Given an integer n, return the number of trailing zeroes in n!.

Note: Your solution should be in logarithmic time complexity.

思路:

  知道思路,完全想不明白啊

别人代码:

public class Solution {

    public int trailingZeroes(int n) {

        if(n <= 0) return 0;

        int k = 0;

        while(n > 0)

        {

            k += n/5;

            n /= 5;

        }

        return k;

    }

}
View Code

为什么??

别人解释:看完之后才恍然大悟,大彻大悟中。。。。

 然后既然不能遍历,便只能换个思路,能够构成末尾0,其实决定因素在于1 to n  的数一共有多少个5因子。那么我们这样考虑:
对于5 那么能够被他整除的是 5 10 15 25 30 ... 这样其实便一共有n/5,对于 25 50 这样的数包括了两个5因子,我们在后面会计算的,在考虑5的时候,结果便是 n/5。(这个时候已经考虑到25 125了 但是只考虑了一次)
对于25 能够被整除的是 25 50 75 ...     这样,其实一共有n/25个,这时候25 中的两个5因子,变都计数了。(在上面的基础上,在考虑一次25 这样 就完成了25两次的计数 n/5/5 == n/25啊 可以统计25有多少次 )
 对于 125  同样能够被其整除的是125 625...(按照上面的方法类似的推导 即可)
这样,是不是结果其实便是:n/5 + n/25 + n/125 ...

你可能感兴趣的:(zero)