leetcode question
Given an integer n, return the number of trailing zeroes in n!.Your solution should be in logarithmic time complexity.
need to pay attention basic situation is N <= 0, no zero! cause 0! = 1;
Solution: 点击打开链接 idea from geeksforgeeks
A zero is produced by prime factor 2 * 5, so we can just count number of 2s and 5s. I
We always have enough 2s , which means 2s more than 5s. So we can just count the number of 5s.
To count number of 5s in prime factors of n! in ( logN ) time
Trailing 0s in n! = Count of 5s in prime factors of n!
= floor(n/5) + floor(n/25) + floor(n/125) + ....
eg 28! 28/ 5 = 5 already count all 5 (5, 10 ,15, 20 ,25)
28 / 25 = 1 count extra 5( in 5 * 5)
28 /125 = 0 count extra 5 (in 25 * 5)
pay attention to overflow
<span style="white-space:pre"> </span>public int trailingZeroes(int n) {
int count = 0;
if(n <= 0){
return 0;
}
// Keep dividing n by powers of 5 and update count
long i;
for (i = 5; n/i >= 1; i *= 5){
count += n/i;
}
return count;
<span style="white-space:pre"> </span>}