Factorial Trailing Zeros

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

	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;
	        
	}


你可能感兴趣的:(leetcode)