Month: October 2016
Factorial Trailing Zeroes
Problem
Given an integer n, return the number of trailing zeroes in n!.
Note: Your solution should be in logarithmic time complexity.
Solution
0 in the number is coming from 10. 10 = 2 * 5. So must count the number of 2*5 pairs in n!.
The naive way is to use n! % 5 each time, add the counter until n! % 5 != 0. However, n! is easy to overflow. So this problem we cannot do the calculation of n!.
To count the number of 5, we can just use the result of n/5. i.e. 5! -> 5/5 = 1 10! -> 10/5 = 2 However, for 25! or 125! or (5^x)!, this includes 25, 125, some 5^x numbers contain more than one 5. So need to add these concealed 5 together. Therefore, the total number of 5 is n/5 + n/25 + n/125 + …. until 5^x > n.
After the judgement of OJ, when n is too big, it means 5^x may get too big to overflow, so the parameter to store this number (i) must be set as long type to avoid overflow.