给定一个整数 n,返回 n! 结果尾数中零的数量。
首先这一题的思路:想要有0出现,得有2和5同时出现;因为5比2大,所以2一定比5先出现多。也就是5的个数也就是0出现的次数。
基于这个思路,写了1.0算法,感觉这个两层循环不合理
func trailingZeroes(n int) int {
if n < 5{
return 0
}
count := 0
for i:=5;i<=n;i=i+5{
num := i
for num % 5 == 0{
count++
num = num/5
}
}
return count
}
通过一番研究,确实不合理,实在没必要一个一个的去统计5的个数,直接用n除以5就是5在n!中出现的次数,改进算法:
func trailingZeroes(n int) int {
count := 0
for n > 0 {
n /= 5
count += n
}
return count
}