Bc04 手脑并用

BC04-手脑并用

BC04-手脑并用

题目:求6789!的值末尾有几个零?


我的解答,试图求出这个阶乘的结果,再数一数有几个零。很显然,我就是典型用手没用脑的。。

递归失败,可能这个数太大了 吧







总结,用递归和循环都能求阶乘,但循环不用考虑一个问题,就是递归用的是栈。

栈是一种数据结构,就是如何使用内存。函数用到的就是栈结构。digui(10)调用栈,不会立即返回,而是等到digui(1)结束了,再返回digui2 ,digui3....直到递归10,所以当递归函数太大,就内存就不够分配了。



除了用循环,还有一种方法求6789!的尾数0的个数。

 思路是,6789!这个数要是除以10能除尽,则有一个0,一直除,直到除不尽。除了几次,就有几个0。而10可以分为5*2,因为所有数里,有一半都有因子2,所以2因子比较多,5因子比较少。

所以除以10的次数,由比较少的5因子决定。即有几个5因子,就可以除几次10。

知识点一:/是浮点除法  , //是整数除法

所以问题就变成了,就 6789 到 1 的  6789 个数里,有多少个包含5因子?假设有n个

把n个数取出来,分别除以5,再把这些结果全部加起来,就是答案。