#172. 阶乘后的零
难度:简单
题目描述
解题思路
产生0只可能是2*5,而且2的数量肯定比5多,所以只要找出所有乘数里5因子的数量,就一定能找打同样多的2和5配对形成0.所以问题可以简化为找出5因子的数量。
可以产生5的数字有 5,10,15,20,25等
要注意的是每个25都会产生两个5,125产生3个5,以此类推
按照这种思想朴素的翻译成代码就是下面这样:
5的来源有:小于n里面5的倍数+特殊能产生多个5的数字
public int trailingZeroes(int n) {
if(n < 5)
return 0;
int re = 1,p = 0;
while(re*5 <= n) {
int temp = re;
while(temp%5 == 0) {
p++;
temp = temp/5;
}
re++;
}
return re+p-1;
}
但是这种会超时,而且有点拗
大佬的写法:详细通俗的思路分析
思路也是累加每个5的倍数里5的总数
public int trailingZeroes(int n) {
int re = 0;
while(n >= 5) {
re += n/5;
n = n/5;
}
return re;
}