尾部的零

要求:

设计一个算法,计算出n阶乘中尾部零的个数

示例:

11! = 39916800,因此应该返回 2

代码:

 1 package main
 2 
 3 import "fmt"
 4 
 5 func main() {
 6     var n int = 25
 7     res := zero(n)
 8     fmt.Printf("%v的阶乘末尾有%v个零", n, res)
 9 }
10 
11 /**
12  * 查找n的阶乘末尾有几个零
13  * 最小的末尾带零的数就是10了,10=2*5(每一对2,5就会产生一个0)
14  * 问题就转化为n!中有多少对2,5
15  * 进一步转化为n!拆分的因子中有多少个5(2出现的频率比5高的多得多,即使没有2也会有4,6,8,总之只要有偶数就能拆分出2)
16  * 25: 5*5*2*2 = 100 产生2个零
17  * 125: 5*5*5*2*2*2 = 1000 产生三个零
18  * 依次类推5的m次方会产生m个零
19  */
20 func zero(n int) int {
21     var count int
22     if(n < 5) {
23         return count
24     }
25     for i:=5;i<=n;i+=5 {
26         tmp := i
27         for tmp>=5 {
28             if tmp%5 == 0 {
29                 count++
30                 tmp /= 5
31             }
32         }
33     }
34     return count
35 }
原文地址:https://www.cnblogs.com/573583868wuy/p/8444692.html