Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3390|回复: 8

[已解决]VBA编写自定义函数计算N阶乘 末尾0有多少个

[复制链接]
发表于 2017-4-1 22:09 | 显示全部楼层 |阅读模式
本帖最后由 laoau138 于 2017-4-7 16:52 编辑

VBA编写自定义函数计算N阶乘  末尾0有多少个


计算一个自然数的阶乘n!  末尾0有多少个  其中参数为n

1!=1

2!=2

3!=6

注意0!=1





最佳答案
2017-4-7 16:43
0的个数=可以分解成多少5的个数。
  1. Sub 阶乘0的个数()
  2.     n = 130
  3.     For i = 5 To n Step 5
  4.         个数 = 个数 + 1
  5.         p = i / 5
  6.         Do While p Mod 5 = 0
  7.             个数 = 个数 + 1
  8.             p = p / 5
  9.         Loop
  10.     Next
  11.     MsgBox n & "的阶乘末尾0的个数有" & 个数 & "个。"
  12. End Sub
复制代码
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2017-4-3 23:45 | 显示全部楼层
本帖最后由 raymanrrr 于 2017-4-4 11:08 编辑

这个题算法不是难点……难的是数据类型,反正我想不起来vb系统定义的数据类型有可以显示很长一段数字的,python倒是可以,vb.net好像也有bigint这种类型,不过vb里……想不出来

要不然只能用数学的方法求解了

评分

参与人数 1 +3 收起 理由
laoau138 + 3

查看全部评分

回复

使用道具 举报

发表于 2017-4-4 11:06 | 显示全部楼层
回复

使用道具 举报

发表于 2017-4-6 20:41 | 显示全部楼层
grf1973 发表于 2017-4-4 11:06
数一下出现n内有几个5,几个10

不是数出来,是算出来。演算推算得到结果。


回复

使用道具 举报

发表于 2017-4-6 20:56 | 显示全部楼层
楼主有本事计算一下,n!阶乘的末尾第1个非0数字是什么?

例如:13!=6227020800
末尾第1个非0数字是8

那么 237!的末尾第1个非0数字是什么?

评分

参与人数 1 +9 收起 理由
laoau138 + 9 来学习

查看全部评分

回复

使用道具 举报

发表于 2017-4-7 16:43 | 显示全部楼层    本楼为最佳答案   
0的个数=可以分解成多少5的个数。
  1. Sub 阶乘0的个数()
  2.     n = 130
  3.     For i = 5 To n Step 5
  4.         个数 = 个数 + 1
  5.         p = i / 5
  6.         Do While p Mod 5 = 0
  7.             个数 = 个数 + 1
  8.             p = p / 5
  9.         Loop
  10.     Next
  11.     MsgBox n & "的阶乘末尾0的个数有" & 个数 & "个。"
  12. End Sub
复制代码

评分

参与人数 1 +9 收起 理由
laoau138 + 9 来学习

查看全部评分

回复

使用道具 举报

发表于 2017-4-7 16:46 | 显示全部楼层
n!阶乘的末尾第1个非0数字是什么?只要计算一下9!,尾数是8,算一下多少个8相乘(每5次循环后又是8),然后乘以 (n mod 10)!最后一个非0数

评分

参与人数 1 +9 收起 理由
laoau138 + 9 来学习

查看全部评分

回复

使用道具 举报

发表于 2017-4-7 18:41 | 显示全部楼层
grf1973 发表于 2017-4-7 16:46
n!阶乘的末尾第1个非0数字是什么?只要计算一下9!,尾数是8,算一下多少个8相乘(每5次循环后又是8),然 ...

那你算出来237!的末尾倒数第1个非0数字是几?
回复

使用道具 举报

发表于 2017-4-7 18:43 | 显示全部楼层
计算n!的末尾含0个数,可以用递归计算超级简单:

  1. Function f(n)
  2.     If n > 4 Then f = n \ 5 + f(n \ 5)
  3. End Function
复制代码


其中【 \】为Int()整除运算。

评分

参与人数 1 +9 收起 理由
laoau138 + 9 来学习

查看全部评分

回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-20 14:16 , Processed in 1.685884 second(s), 20 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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