n整除5(向下去整)就是答案
所谓末尾有0,就是10的倍数
10的因数有1,2,5,10
10的5的倍数,n整除5的过程把10的倍数也算上了
2的倍数比5的倍数多得多,肯定够用
乘积末尾的0的个数依赖于因子中的2的个数和5的个数。对于阶乘来说,每2个数字就至少有一个2的因子,所以2的因子是足够的。5的因子相对少些,至少连续5个数才能保证一定出现一个。
注意,这里连续5个数保证出现一个5的因子是指最少的情况。比如1,2,3,4,5,这就只会出现一个。
intnzerooffactorial(intn){
intzerocnt
=
0;
intmultipleof5
=
5;
while
(n
>=
multipleof5)
{
zerocnt
+=
n/multipleof5;
multipleof5
*=
5;
}
returnzerocnt;}
e.g.
nzerooffactorial(81)
=
19