给定一个整数 n
,返回 n!
结果中尾随零的数量。
提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1
示例 1:
输入:n = 3 输出:0 解释:3! = 6 ,不含尾随 0
示例 2:
输入:n = 5 输出:1 解释:5! = 120 ,有一个尾随 0
示例 3:
输入:n = 0 输出:0
提示:
0 <= n <= 104
题目比较简单,有效代码只有5行,直接上代码了,不理解的直接私信或者评论,看到后第一时间解答
class Solution {
/**阶乘里的0一定是5的倍数产生的,比如5,10,15等
如果出现了5的2次方则增加1次(它需要乘以2个2才能获得两个0,作为5的倍数已经算了一次了)
出现了5的3次方则再增加1次(它需要乘以3个2才能获得3个0,作为5和25的时候已经分别计算过一次了)
5的倍数和2的倍数相乘就可以成为10的倍数,也就是结尾为0
1~n中2的倍数出现的次数肯定远大于5的倍数出现的次数*/
public int trailingZeroes(int n) {
int ans = 0;
while(n != 0) {
/**第一次进来有多少个5的倍数算多少个
第二次进来有多少个25的倍数,再加一遍
第三次进来有多少个125的倍数,再加一遍 */
int num = n / 5;
ans += num;
/**每次除以5实现先算5再算25再算125再算625.。。。 */
n = n / 5;
}
return ans;
}
}