设计一个算法,计算出n阶乘中尾部零的个数算法
$11! = 39916800$,所以应该返回 2设计
思路:
这是一个数学问题,十进制尾数获得0的只有$2*5$,将阶乘的每一个因素分解质因数,明显获得2的数量多于5的数量,因此,这个问题就变成了有多少个5的问题。
能够是5,25,125...为何这样?好比$26!$:25其实能够分解成2个5相乘,而$26/5$只计算了一个5,所以还要再加$26/25$$.code
class Solution { public: /* * @param n: A long integer * @return: An integer, denote the number of trailing zeros in n! */ long long trailingZeros(long long n) { // write your code here, try to do it without arithmetic operators. /*这是一个数学问题,十进制尾数获得0的只有2*5,将阶乘的每一个因素分解质因数,明显获得2的数量多于5的数量,因此,这个问题就变成了有多少个5的问题。能够是5,25,125...为何这样?好比26!:25其实能够分解成2个5相乘,而26/5只计算了一个5,所以还要再加26/25.*/ long long sum = 0; long long t=5; while(t<=n){ sum += n/t; t = 5*t; } return sum; } };