只有2 * 5才会产生0,所以我们只要统计2和5的对数就行,因为2的数量一定大于5的数量,所以决定0个数的是5的数量。
java
public int trailingZeroes(int n) {
int fiveNum = 0;
for(int i = 5; i <= n; i += 5) {
int num = i;
while (num % 5 == 0) {
num /= 5;
fiveNum++;
}
}
return fiveNum;
}
O(n)的实现,我们知道只要考虑能拆出的5的数量就可,而n/5得到的就是当前n中第一次能拆出的5的数量;n/25得到的就是当前n中第二次能拆出的5的数量,以此类推直到拆不出5为止。
java
public int trailingZeroes2(int n) {
int fiveNum = 0;
while (n >= 5) {
n /= 5;
fiveNum += n;
}
return fiveNum;
}