题目:
Given an integer n, return the number of trailing zeroes in n!.
Note: Your solution should be in logarithmic time complexity.
/*
* 考虑如下情况:
* 计算23!的末尾有多少0
* 思路:
* 如果要末尾出现0,则必须在乘积中出现 10或者10的倍数。所以在阶乘中找出能有多少个乘积为10或者10的倍数,则知道阶乘有多少个0
* 我们知道只有在 2n*5m 时,才会出现0; 且2的倍数情况多于5,鉴于此,我们只需要统计5的倍数有多少就知道多少个0;
* 23/5=4,可知,23!末尾有4个0
*
* 计算101!的末尾有多少0
* 思路:
* 在这里,与上面略微有些区别:最明显一个:假设100,他是增加两个0而不是一个0;
* 此外,例如25. 25*2 =50 ; 此处的确增加一个0;但是50*2=100又增加一个0;(2的数量多于5),所以不能简单的用5来断定0的数目
* 但是我们可以发现如下一个规律:25=5*5 所以每一个25或者25的倍数,都应该多计算一个0;
* 因此对已101: 101/5=20
* 101/25=4
* 101!的阶乘尾部有20+4=24个0
*
* 计算1000!的末尾有多少0
* 思路:
* 同样的问题还存在于5^3之中,以此类推即可。
* */
public int trailingZeroes(int n) {
int count=0;
if(n==0)
return 0;
while(n!=0){
count+=n/5;
n=n/5;
}
return count;
}