题目描述
设计一个算法,计算出n阶乘中尾部零的个数。
样例1
输入: 11
输出: 2
样例解释: 11! = 39916800, 结尾的0有2个。
样例2
输入: 5
输出: 1
样例解释: 5! = 120, 结尾的0有1个。
java题解
可以将每个数拆分成其素因子的乘积,可以发现,0是由2*5产生的,而5的数量一定小于2的数量,因此5的个数决定了结尾0的个数。
只要计算n的阶乘中,5这个素因子出现多少次即可。
class Solution {
/*
* param n: As desciption
* return: An integer, denote the number of trailing zeros in n!
*/
public long trailingZeros(long n) {
long sum = 0;
while (n != 0) {
sum += n / 5;
n /= 5;
}
return sum;
}
};
C++题解
class Solution {
public:
// param n : description of n
// return: description of return
long long trailingZeros(long long n) {
long long sum = 0;
while (n != 0) {
sum += n / 5;
n /= 5;
}
return sum;
}
};
python题解
class Solution:
# @param n a integer
# @return ans a integer
def trailingZeros(self, n):
sum = 0
while n != 0:
n /= 5
sum+= n
return sum