给定一个整数 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