题目描述:
Given an integer n, return the number of trailing zeroes in n!.
Example 1:
Input: 3 Output: 0 Explanation: 3! = 6, no trailing zero.
Example 2:
Input: 5 Output: 1 Explanation: 5! = 120, one trailing zero.
中文理解:给定一个数,求这个数阶乘的结果末尾有几个零。
解题思路:将阶乘进行因式分解,比如5!=1*2*3*4*5=1*2*3*2*2*5,共有1对2*5,所以结果就只有一个0嘛;有几对2*5,结果就有几个0!
所以问题就简化为找有几对2*5。2的个数是远远多于5的,所以最终简化为了找出5的个数即可。
如果找出5的个数呢,比如20!,从1到20,共有5,10,15,20,共有4个5,即结尾0的个数为n/5!25!结果不只是25/5=5个0,25结果有6个0,因为25=5*5,有两个5。所以结果f(n)=n/5+f(n/5)。
代码(java):
class Solution {
public int trailingZeroes(int n) {
if(n/5>=5){
return n/5+trailingZeroes(n/5);
}
else{
return n/5;
}
}
}