题目:
给定一个整数n,返回以n结尾的0的个数!
Given an integer n, return the number of trailing zeroes in n!.
Input: 3 Output: 0 Explanation: 3! = 6, no trailing zero. Input: 5 Output: 1 Explanation: 5! = 120, one trailing zero. Note: Your solution should be in logarithmic time complexity.
参考:
https://www.cnblogs.com/grandyang/p/4219878.html
思路:
找乘数中10的个数,而10可分解为2和5,而我们可知2的数量又远大于5的数量,那么此题即便为找出5的个数。仍需注意的一点就是,像25,125,这样的不只含有一个5的数字需要考虑进去
以n=52为例
res += n / 5 —— 表示在该轮中,5的个数,n=52时,res = res+10,因为在该轮中,有10个为5倍数的数
n /= 5 ——将n的范围压缩,每个范围表示一个1~5的小范围,用于在下一轮求这些小范围内有多少个能再被5整除的数
(如n=52,则可分为1~5,6~10,11~15,16~20……,46~50,因为51~52没有,所以不计算,对可被多次除的数,如25,在21~25中,50在46~50中,在第二轮时,需要求的是能被25整除的数,这些数也是每5个小范围中才存在一个,所以用n=n/5来压缩范围)
循环直到n==0
代码:
class Solution {
public int trailingZeroes(int n) {
int res = 0;
while (n>0) {
res += n / 5;
n /= 5;
}
return res;
}
}