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