Leetcode - Factorial Trailing Zeroes

Leetcode - Factorial Trailing Zeroes_第1张图片

My code :

public class Solution {
    public int trailingZeroes(int n) {
        if (n <= 0)
            return 0;
        int sum = 0;
        int factor = 5;
        while (factor <= n / 5) {
            sum += n / factor;
            factor *= 5;
        }
        
        sum += n / factor;
        return sum;
    }
    public static void main(String[] args) {
        Solution test = new Solution();
        System.out.println(test.trailingZeroes(2147483647));
    }
}

My test result:

Leetcode - Factorial Trailing Zeroes_第2张图片
Paste_Image.png

这道题目其实是找5的个数,我没想到。看这篇文章。
http://bookshadow.com/weblog/2014/12/30/leetcode-factorial-trailing-zeroes/
但是这个也是错的。当输入很大时,factor 也会跟着很大,然后突然有次 * 5之后溢出了,值反而比 n 小了。 所以会不断循环。超时。

Leetcode - Factorial Trailing Zeroes_第3张图片
Paste_Image.png

**
总结: Math
**

Anyway, Good luck, Richardo!

My code:

public class Solution {
    public int trailingZeroes(int n) {
        // 25: 5, 10, 15, 20, 25(2)
        int sum = 0;
        while (n > 0) {
            sum += n / 5;
            n = n / 5;
        }
        return sum;
    }
}

一开始只想起来是数 2 , 5 的个数,然后取最小值,就是0的个数。
后来发现 5 的个数总比 2 小,于是可以直接找5的个数。
20! 里面有4 个 5
25!里面有6 个 5 5,10,15,20,25(包含两个 5)

所以,我不停地 除以5,拿到5的个数就行了。

Anyway, Good luck, Richardo! -- 09/28/2016

你可能感兴趣的:(Leetcode - Factorial Trailing Zeroes)