题目描述
请设计一个算法,计算n的阶乘有多少个尾随零。
给定一个int n,请返回n的阶乘的尾零个数。保证n为正整数。
测试样例:
5
返回:1
时间限制:3秒空间限制:32768K
解析:常规解法计算出结果之后再进行计算得到0的个数是时间超限的,因此应该寻求跟简单的方法,计算得到0的个数,可以理解成阶乘结果可以分解出多少个10相乘,而10又是2和5相乘的结果。因此,只要计算出1-n中有多少个2和5即可,因2的个数会远大于5的个数,即知道5的个数既可以得到0的个数。
如100,100/5=20,20/5=4,4/5=0。因此100中5的个数为20+4+0=24个。
public int getFactorSuffixZero(int n){ int count = 0; while(n/5 != 0){ count += n/5; n = n/5; } return count; }