乘积末尾的0的个数依赖于因子中的2的个数和5的个数。
对于阶乘来说,每2个数字就至少有一个2的因子,所以2的因子是足够的。
5的因子相对少些,至少连续5个数才能保证一定出现一个。
注意,这里连续5个数保证出现一个5的因子是指最少的情况。
比如1,2,3,4,5,这就只会出现一个。
但是考虑 21,22,23,24,25,25 = 5 * 5,所以如果乘以25那就能得到2个5的因子。
int nZeroOfFactorial(int n)
{
int zeroCnt = 0;
int multipleOf5 = 5;
while (n >= multipleOf5)
{
zeroCnt += n/multipleOf5;
multipleOf5 *= 5;
}
return zeroCnt;
}
e.g. nZeroOfFactorial(81) = 19