BC04
题目:求6789!的值末尾有几个零?\
我的解答,试图求出这个阶乘的结果,再数一数有几个零。很显然,我就是典型用手没用脑的。。
递归失败,可能这个数太大了 吧
\
::: {.image-package}
\
::: {.image-caption}
:::
:::
\
\
::: {.image-package}
\
::: {.image-caption}
:::
:::
总结,用递归和循环都能求阶乘,但循环不用考虑一个问题,就是递归用的是栈。
栈是一种数据结构,就是如何使用内存。函数用到的就是栈结构。digui(10)调用栈,不会立即返回,而是等到digui(1)结束了,再返回digui2
,digui3.…直到递归10,所以当递归函数太大,就内存就不够分配了。\
::: {.image-package}
\
::: {.image-caption}
:::
:::
除了用循环,还有一种方法求6789!的尾数0的个数。
思路是,6789!这个数要是除以10能除尽,则有一个0,一直除,直到除不尽。除了几次,就有几个0。而10可以分为5*2,因为所有数里,有一半都有因子2,所以2因子比较多,5因子比较少。
所以除以10的次数,由比较少的5因子决定。即有几个5因子,就可以除几次10。
知识点一:/是浮点除法 , //是整数除法
所以问题就变成了,就 6789 到 1 的 6789
个数里,有多少个包含5因子?假设有n个
把n个数取出来,分别除以5,再把这些结果全部加起来,就是答案。\
::: {.image-package}
\
::: {.image-caption}
:::
:::
:::
:::
:::