鱼C论坛

 找回密码
 立即注册
查看: 935|回复: 10

[已解决]求2147483647的阶乘的末尾有多少连0

[复制链接]
发表于 2020-2-24 14:45:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
普通算法  都是超时啊
我的想法是计算5**1  5**2  5**3  .。。。。。。

  1. t=0
  2. for x in range(1,2147483648):
  3.   s=x
  4.   while s%5==0:
  5.       t+=1
  6.       s//=5
  7.       
  8. print(t)
复制代码
最佳答案
2020-2-24 15:22:21
求末尾几个0,就看这个数有几个10因子,10=5*2,但是最后得到的结果2的个数一定多于5的个数,所以只需要求5的个数就可以了。但是就像25这种数字,它可以被5除两次,所以我们要在循环中除以5,最后把除5的个数累加就可以了。
  1. n = 2147483647
  2. s = 0
  3. n1 = n
  4. while n > 0:
  5.   s = s + n // 5
  6.   n //= 5
  7. print(n1,'!末尾有', s, '个0')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-24 15:15:47 | 显示全部楼层
10的倍数,100的倍数。。。。
5*2
25*4
125*8
。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-24 15:22:21 | 显示全部楼层    本楼为最佳答案   
求末尾几个0,就看这个数有几个10因子,10=5*2,但是最后得到的结果2的个数一定多于5的个数,所以只需要求5的个数就可以了。但是就像25这种数字,它可以被5除两次,所以我们要在循环中除以5,最后把除5的个数累加就可以了。
  1. n = 2147483647
  2. s = 0
  3. n1 = n
  4. while n > 0:
  5.   s = s + n // 5
  6.   n //= 5
  7. print(n1,'!末尾有', s, '个0')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-24 15:34:26 | 显示全部楼层
是不是求这个数的阶乘后,这个数字后面有几个零,是不是这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-24 15:42:36 | 显示全部楼层
fan1993423 发表于 2020-2-24 15:34
是不是求这个数的阶乘后,这个数字后面有几个零,是不是这样

第一,是末尾连续0的个数
第二,不可能去计算阶乘是多少 ,然后再去查0的个数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-24 15:43:47 | 显示全部楼层
wp231957 发表于 2020-2-24 15:42
第一,是末尾连续0的个数
第二,不可能去计算阶乘是多少 ,然后再去查0的个数

我懂,就是这个数的阶乘最后末尾有几个0,这个数肯定是xxx0000的数字
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-24 15:45:30 | 显示全部楼层
伏惜寒 发表于 2020-2-24 15:22
求末尾几个0,就看这个数有几个10因子,10=5*2,但是最后得到的结果2的个数一定多于5的个数,所以只需要求5 ...


厉害,可惜 没有击败多少人

  1. 执行结果:
  2. 通过
  3. 显示详情

  4. 执行用时 :48 ms, 在所有 Python3 提交中击败了18.13%的用户
  5. 内存消耗 13.4 MB, 在所有 Python3 提交中击败了38.06%的用户
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-24 15:54:04 | 显示全部楼层
本帖最后由 wp231957 于 2020-2-24 15:55 编辑
伏惜寒 发表于 2020-2-24 15:22
求末尾几个0,就看这个数有几个10因子,10=5*2,但是最后得到的结果2的个数一定多于5的个数,所以只需要求5 ...


同样代码  js  就好一些:

  1. 执行结果:
  2. 通过
  3. 显示详情

  4. 执行用时 :76 ms, 在所有 JavaScript 提交中击败了49.69%的用户
  5. 内存消耗 :34.4 MB, 在所有 JavaScript 提交中击败了43.10%的用户
复制代码

  1. var trailingZeroes = function(n)
  2. {
  3.         var t=0;
  4.         while(n>0)
  5.         {
  6.             t+=parseInt(n/5);
  7.             n=parseInt(n/5);
  8.         };
  9.         return t;
  10. };
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-24 17:56:40 | 显示全部楼层
wp231957 发表于 2020-2-24 15:45
厉害,可惜 没有击败多少人

python运行慢而已,没有必要比较什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-24 20:41:36 | 显示全部楼层
伏惜寒 发表于 2020-2-24 17:56
python运行慢而已,没有必要比较什么

我就想问下,它说的是这个数阶乘,你直接用这个数去地板除5原理是什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-26 10:55:36 | 显示全部楼层
fan1993423 发表于 2020-2-24 20:41
我就想问下,它说的是这个数阶乘,你直接用这个数去地板除5原理是什么?

结果末尾几个0,就看这个数有几个10因子
举例    5!=1*2*3*4*5=1*2*3*2*2*5=1*2*3*2*10(2有多余而5用完了,所以问题就转换为地板除5求阶乘因式分解后有几个5)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-31 09:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表