📅  最后修改于: 2023-12-03 15:28:48.216000             🧑  作者: Mango
本题为门|门 IT 2006第32题,要求编写一个程序,输入一个正整数n,输出n!末尾有几个0。
末尾的0是由2和5相乘得到的,因此我们只需要计算n!中2和5的个数,取较小的值即可。
具体做法是将n!分解成素因数,例如:
在n!的素因数中,2的个数比5多,因此我们只需要计算5的个数即可。计算5的个数可以使用如下公式:
每个n/5表示1~n中5的倍数的个数,n/25表示5的倍数中还有一个5的个数,n/125表示5的倍数中还有两个5的个数,以此类推。
以下是Python实现:
def trailing_zeros(n):
zeros = 0
i = 5
while n >= i:
zeros += n // i
i *= 5
return zeros
以下是Java实现:
public static int trailingZeros(int n) {
int zeros = 0;
int i = 5;
while (n >= i) {
zeros += n / i;
i *= 5;
}
return zeros;
}
调用函数trailing_zeros(n)或trailingZeros(n),其中n为正整数,返回n!末尾的0的个数。