Golang 计算尾部0的阶乘程序
阶乘是指将一个数开始连乘直至1的过程。例如,5阶乘(5!)的计算过程为:54321=120。而5!中尾部的0的个数,即5!末尾有几个0,是一个常常出现的问题。
为了解决这个问题,我们需要首先了解末尾0的产生过程。在计算阶乘的过程中,末尾0的数量与因子中10的个数有关。而10又可以拆分成2和5这两个因子,因此问题就转化为:阶乘中因子5的数量。
Golang中,我们可以通过以下程序计算阶乘末尾0的个数:
func CountTrailingZeroes(n int) int {
count := 0
for n >= 5 {
n /= 5
count += n
}
return count
}
这段代码中,我们首先定义了一个变量count用于计数。然后,我们判断n是否大于等于5,若是,则将n除以5,并将商加入count中。这个操作会去除所有因子2,使n只剩下因子5。由于每个因子5都会产生一个末尾0,因此我们可以通过这种方式计算n!中末尾0的个数。最后,我们返回count即可。
为了方便测试,我们可以编写如下的main函数:
func main() {
fmt.Println(CountTrailingZeroes(10)) // 2
fmt.Println(CountTrailingZeroes(15)) // 3
fmt.Println(CountTrailingZeroes(25)) // 6
fmt.Println(CountTrailingZeroes(30)) // 7
}
在这里,我们分别对10、15、25、30几个数字进行了计算并输出结果。可以看到,10!和15!末尾有2个0和3个0,与预期结果一致。而25!末尾有6个0,是因为25可以拆分成5*5,因此它产生了2个因子5。最后,30!末尾有7个0,其中一半来自因子2,一半来自因子5。
结论
通过以上的代码,我们可以看到,计算阶乘末尾0的个数并不需要把阶乘的值全部计算出来。只需要计算其中因子5的数量,就可以轻松地得出结果。在Golang中,我们可以通过一个简单的循环来实现这个过程。
极客笔记