题目描述
设计一个算法,算出 n 阶乘有多少个尾随零。
示 例
示例 1:
输入: 3
输出: 0
解释: 3! = 6, 尾数中没有零。
示例 2:
输入: 5
输出: 1
解释: 5! = 120, 尾数中有 1 个零.
说明: 你算法的时间复杂度应为 O(log n) 。
解题思路
第一层:数尾数有几个零实际上是看能被几个10整除
第二层:能被几个10整除实际上是看有几个因子5和2
第三层:有几个因子5和2实际上是有几个因子5
第四层:看有几个因子5直接n/5
第五层:在第四层每个25不止一个五,只算了一次,再加上n/25
第六层:每个125不止两个5,只算了两次,再加上n//125
以此类推,直到n
代码
int trailingZeroes(int n){
int count=0;
for(int i=1;pow(5,i)<=n;i++){
count+=(int)(n/pow(5,i));
}return count;
}