1. n! = n * (n-1) * (n-2) * ... * 5 * 4 * 3 * 2 * 1,求尾数0的个数,问题转换为
“n阶乘尾数的个数” 等于 “1到n中,凑出的 2 * 5的对数” ---- (1)
在1到n的自然数中,是2的倍数的自然数肯定比是5的倍数的自然数的个数多,
比如当 n = 7 是,1 2 3 4 5 6 7相乘,其中 2 4 6 都是2 的倍数的自然数,而只有1个5,故 “2 * 5 ”的对数只有1,即问题(1)转换为
“n!尾数的个数” 等于 “1到n中,存在多少5” ---- (2)
这时可以想到,n/5 ,求出5出现的个数,但是这里会出错,
比如 1 到 26中,得到 26/5 = 5,会以为1到26中出现了5个5,
其实其中 5 10 15 20 25 中有6个5.因为25是5 * 5,存在了两个5,
故可以第一轮除以5,得到存在单个5相乘的数字的序列中的5的个数.比如 5=(5 * 1),10 = (5 * 2),15=(5 *3),20 =(5 *4),25 =(5 *5)提取出5个5
然后每个数字除以5,得到 1 2 3 4 5,此时再除以5,得到25中的另一个5
备注:真不好表达!汗
public class Solution {
public int trailingZeroes(int n) {
int ans = 0;
while(n>0){
ans += n/5;
n = n/5;
}
return ans;
}
}