设计一个算法,计算出n阶乘中尾部零的个数
样例
11! = 39916800,因此应该返回 2
解题思路:最开始一上来就是传统的思路,从1开始到n,做乘法,不过每次乘完的结果都循环除以10直到不能整除,华丽丽的超时了;之后又换了找因数的思路,从1到n去找他们总共有多少个2和多少个5,去两者中小的那一个,又华丽的超时了。然后我看网上分析说,因为5的个数肯定小于2的个数,所以只需要数共有多少个5就可以。然而还是超时了,并且我感觉已经不造为什么出错了
1 class Solution { 2 /* 3 * param n: As desciption 4 * return: An integer, denote the number of trailing zeros in n! 5 */ 6 public long trailingZeros(long n) { 7 8 if(n<1) return 0; 9 int c = 0; 10 11 while(n/5 != 0) { 12 n /= 5; 13 c += n; 14 } 15 16 return c; 17 } 18 };