黑马程序员技术交流社区

标题: 算法 [打印本页]

作者: Moonboy2014    时间: 2014-7-6 22:18
标题: 算法
1000的阶乘的结果里包含多少个0啊
作者: 幕夏    时间: 2014-7-6 22:23
我列了表算了下31个0吧
作者: Moonboy2014    时间: 2014-7-6 22:25
幕夏 发表于 2014-7-6 22:23
我列了表算了下31个0吧

光尾数的0就有200多个啊:loveliness:
作者: 幕夏    时间: 2014-7-6 22:26
上面漏错了 应该是110个0 吧
作者: Moonboy2014    时间: 2014-7-6 22:26
知道的各位大神请多多指点
作者: fantacyleo    时间: 2014-7-6 23:13
本帖最后由 fantacyleo 于 2014-7-6 23:16 编辑

这个题的思路是寻找末尾0产生的条件。

尾数是1、3、7、9的数参与乘法运算,不影响乘积末尾0的个数。比如3,3*6*5末尾0的个数和6*5末尾0的个数是一样的。原因很简单:3*m,如果m末尾不含0,3*m乘积末尾不可能是0。如果m末尾含0,去掉末尾0的部分与3相乘不可能产生末尾0,因此3*m的末尾0的个数与m相同。同理可以证明尾数是1、3、7、9的数参与乘法运算,不影响乘积末尾0的个数

那么要考虑的只剩下尾数是偶数(包括0)或5的数。进一步分析,末尾0来自2*5(其他偶数乘以5可以分解为2乘以5),因此只要看1-1000中的数可以分解出多少对[2 5]。显然2的个数要多于5,能凑成多少对[2 5]完全取决于5的个数。那么,只要设一个计数器,对1-1000的每个数,不断除5直到不能整除为止,每整除1次,计数器+1
作者: Moonboy2014    时间: 2014-7-6 23:21
fantacyleo 发表于 2014-7-6 23:13
这个题的思路是寻找末尾0产生的条件。

尾数是1、3、7、9的数参与乘法运算,不影响乘积末尾0的个数。比如3 ...

那中间的0怎么算呢
作者: fantacyleo    时间: 2014-7-6 23:30
Moonboy2014 发表于 2014-7-6 23:21
那中间的0怎么算呢

中间的0?你是说像1001中间的两个0?貌似我见到这个题都是让算末尾0的吧,中间0还真没啥好办法
作者: 幕夏    时间: 2014-7-7 00:09
用笨方法,for循环遍历1-1000中的数,然后将每个数用一个可以将整数转换成字符串的函数转换成字符串,然后对字符串遍历,遇到0,计数器+1,这样就算出来了。不过现在不会写将整数转换成字符串的函数。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2