题目描述
Given an integer n, return the number of trailing zeroes in n!.
Note: Your solution should be in logarithmic time complexity.
文章出处:https://oj.leetcode.com/problems/factorial-trailing-zeroes/解题思路
- 求出n!的最后零因子的个数。
- 最后零因子的个数为(2,5)出现的次数。
- 2出现的次数一定大于5出现的次数
- 1*5,2*5,...,5*5,...10*5,...,25*5,...:注意看5出现的规律(SUM(N/5^1, N/5^2, N/5^3...))
- 参考文章:http://blog.csdn.net/xudli/article/details/42262153
自己的代码
package leetcode;
public class FactorialTrailingZeroes {
/*public static int trailingZeroes(int n) {//本方法超时
int i = 1;
int fiveNum = 0;
for(int temp = i*5; temp <= n; i++, temp = i*5){
fiveNum++;
if(i%5 == 0){//说明有多个5,开始计算有多少个5
for(int consult = i/5; consult != 0; consult /= 5)
fiveNum++;
}
}
return fiveNum;
}*/
public static int trailingZeroes(int n) {
if(n < 1) return 0;
int fiveNum = 0;
for(int consult = n/5; consult != 0; consult /= 5)
fiveNum += consult;
return fiveNum;
}
public static void main(String[] args) {
//int n = -1;
//int n = 0;
//int n = 1;
//int n = 2;
//int n = 5;
int n = 25;
System.out.println(FactorialTrailingZeroes.trailingZeroes(n));
}
}