尾部的零trailing-zeros

设计一个算法,计算出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 };

 

posted @ 2015-11-30 23:53  码代码的banana  阅读(421)  评论(1编辑  收藏  举报