LeetCode No.172 **

给定一个整数 n,返回 n! 结果尾数中零的数量。

示例 1:

输入: 3
输出: 0
解释: 3! = 6, 尾数中没有零。
示例 2:

输入: 5
输出: 1
解释: 5! = 120, 尾数中有 1 个零.
说明: 你算法的时间复杂度应为 O(log n) 。

 

解题思路:阶乘 0 的个数有一个规律——只能由 2 与 5 相乘得到,而 2 的个数远多于 5,所以最后变成求 5 的个数。

需要注意的是如 25、125、625具有 25x4=100,125x8=1000, 625x16=10000 的特性。

以 99为例,可以被 5 整除共 99/5 = 19个。可以被25整除为 3个,恰好为 19/5 = 3

以131为例,可以被 5 整除共 131/5 = 26个。可以被25整除为 5个,恰好为 26/5 = 5。可以被125整除的为1个,恰好为5/5 = 1。

//171
int trailingZeroes(int n)
{
    if(n<5)  return 0;
    int res=0;
    while(n)
    {
        res += n/5; //尾号为5的个数
        n = n/5;// 25x4=100,125x8=1000, 625x16=10000;
    }
    return res;
}//171

 

posted @ 2019-07-13 21:30  andyalgorithm  阅读(102)  评论(0编辑  收藏  举报