尾数的0
设计一个算法,计算出n阶乘中尾部零的个数
思路:
思考可知,末尾的0的必然由因数10得到,将10因数分解可知由2*5得到,将1到n的自然数都分解为质因数可以计算其中2*5的组合个数,即可得到10的个数,也即末尾0的个数,由于因数2的个数必然比5多,所以只计算1到n中分解出的5的个数即可,作为5的N次幂的倍数的自然数可拿到的5的因数个数分别为N,于是总结算法如下:
public long trailingZeros(long n) {
long five = 0;
for(int i=1;Math.pow(5,i)<=n;i++){
five += n/(long)(Math.pow(5,i));
}
return five;
}
Math.pow()方法的返回值事double类型,需强转再计算,否则在n过大时计算结果会出现误差