172. 阶乘后的零

78 阅读1分钟

题目:
给定一个整数 n ,返回 n! 结果中尾随零的数量。

提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1
leetcode.cn/problems/fa…

解法:
10出现的次数可以转换为2 * 5出现的次数,2的次数肯定比5多,考虑5出现的次数即0出现的次数。 题目是求1~n的所有数的质因数中,5出现的次数:

1*5 2*5 3*5 4*5 5*5 6*5 7*5 8*5 9*5 
2*5*5 3*5*5 4*5*5 5*5*5 6*5*5 7*5*5 8*5*5 9*5*5  
2*5*5*5 3*5*5*5 4*5*5*5 5*5*5*5 6*5*5*5 7*5*5*5 8*5*5*5 9*5*5*5 
...    n

n是整数,newN = n / 5会向下取整。

5 的倍数有 n / 5 个
25 的倍数有 n / 25 个
125 的倍数有 n / 125 个
以此类推 第一次n/5得到了因数中有1个5的数字数目
第一次n/5又得到了因数中有1个5的数字数目
...

func trailingZeroes(n int) int {
	ans := 0
	for n != 0 {
		ans = ans + n / 5
		n = n / 5
	}
	return ans
}