Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: legend_chen

出题:看看谁的代码最简单-求自然数的阶乘n!的结果末尾零的个数

[复制链接]
发表于 2008-1-20 11:47 | 显示全部楼层

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>legend_chen</i>在2008-1-20 10:54:00的发言:</b><br/><div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>Luckyguy2008</i>在2008-1-20 10:49:00的发言:</b><br/><br/>好像1句话就够了<br/><br/>Function 尾数(Num As Range) As Long<br/>尾数 = Int(Num / 5)<br/>End Function<br/><br/><br/></div><p></p><p>&#160;</p><p>&#160;</p><p>不仅要代码简单,同时要保证结果正确。</p></div><p></p>确实有问题,考虑不周全[em04]
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

发表于 2008-1-20 11:53 | 显示全部楼层

<p>改成这样呢,应该在100以内可以:</p><p>Function 尾数(Num As Range) As Long<br/>尾数 = Int(Num / 5) + Int(Num / 25)<br/>End Function<br/></p>
回复

使用道具 举报

发表于 2008-1-20 11:57 | 显示全部楼层

后面再加个+ Int(Num / 125)可以算到600<br/>
回复

使用道具 举报

发表于 2008-1-20 12:24 | 显示全部楼层

<p></p><p>多大的数都满足</p><p>Function 尾数(Num As Range) As Long<br/>&nbsp;&nbsp;&nbsp; Dim i As Long, j As Long<br/>&nbsp;&nbsp;&nbsp; j = Int(Log(Num) / Log(5))<br/>&nbsp;&nbsp;&nbsp; For i = 1 To j<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 尾数 = 尾数 + Int(Num / 5 ^ i)<br/>&nbsp;&nbsp;&nbsp; Next<br/>End Function</p>
回复

使用道具 举报

发表于 2008-1-20 12:32 | 显示全部楼层

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>guideming</i>在2008-1-20 11:15:00的发言:</b><br/><p>来一个长的</p><p>Function 尾数(Num As Range) As Long<br/>&nbsp;&nbsp;&nbsp; Dim i%, k%<br/>&nbsp;&nbsp;&nbsp; k = 0<br/>For i = 1 To Len(Num)<br/>&nbsp;&nbsp;&nbsp; If Num Mod 10 ^ i = 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; k = k + 1<br/>&nbsp;&nbsp;&nbsp; Else: Exit For<br/>&nbsp;&nbsp;&nbsp; End If<br/>Next<br/>&nbsp;&nbsp;&nbsp; <br/>尾数 = k</p><p>End Function</p><p>&nbsp;</p><p>===============================================================</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><br/></div><p></p>你不是要求求阶乘结果后面的0的个数吗?
[此贴子已经被legend_chen于2008-1-20 13:06:25编辑过]
回复

使用道具 举报

发表于 2008-1-20 12:40 | 显示全部楼层

<p>&nbsp;</p><p>[em06]</p><p>我的适用范围太小了</p><p></p>
回复

使用道具 举报

发表于 2008-1-20 12:50 | 显示全部楼层

Function weishu(num As Range) As Long<br/>i = 5<br/>While i &lt;= num<br/>爓eishu = weishu + Int(num / i)<br/>爄 = i * 5<br/>Wend<br/>End Function<br/>
回复

使用道具 举报

 楼主| 发表于 2008-1-20 13:01 | 显示全部楼层

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>guideming</i>在2008-1-20 12:32:00的发言:</b><br/><div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>guideming</i>在2008-1-20 11:15:00的发言:</b><br/><p>来一个长的</p><p>Function 尾数(Num As Range) As Long<br/>&nbsp;&nbsp;&nbsp; Dim i%, k%<br/>&nbsp;&nbsp;&nbsp; k = 0<br/>For i = 1 To Len(Num)<br/>&nbsp;&nbsp;&nbsp; If Num Mod 10 ^ i = 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; k = k + 1<br/>&nbsp;&nbsp;&nbsp; Else: Exit For<br/>&nbsp;&nbsp;&nbsp; End If<br/>Next<br/>&nbsp;&nbsp;&nbsp; <br/>尾数 = k</p><p>End Function</p><p>&nbsp;</p><p>===============================================================</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#ff0000">agui,题目是要你求介乗</font></p><br/></div><p></p>你不是要求求阶乘结果后面的0的个数吗?</div><p></p><p>===========================================================================</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对啊,是阶乘末尾的0的个数。</p>
[此贴子已经被作者于2008-1-20 13:07:19编辑过]
回复

使用道具 举报

发表于 2008-1-20 14:09 | 显示全部楼层

<p>刚刚学习了下"递归" 正好是这个问题(偶似懂非懂)</p><p>Function F(ByVal n As Integer) As Long<br/>If n = 1 Then<br/>F = 1<br/>Else:<br/>F = n * F(n - 1)<br/>End If<br/>End Function<br/></p><p>递归 好厉害</p>
回复

使用道具 举报

发表于 2008-1-20 14:16 | 显示全部楼层

<p>教程上是这么说的 假如n=4</p><p>F =&nbsp;4 * F(4 - 1) 调用f(3)<br/></p><p>F =&nbsp;3 * F(2 - 1) 调用f(2)</p><p>F =&nbsp;2 * F(2 - 1) 调用f(1)</p><p>F(1)=1 开始返回</p><p>2*1 得到2</p><p>3*2 6</p><p>4*6 24</p><p>答案 24</p><p><br/></p><p><br/></p>
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-16 03:16 , Processed in 0.719847 second(s), 6 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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