Leetcode - Factorial Trailing Zeroes

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:

Paste_Image.png

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容