友情提示:380元/半年,儿童学编程,就上码丁实验室。
VB代码:(2018年9月金华十校)14. 趣味数学题:n 的阶乘 n!=1×2×3×4×5×…×n,当 n≥5 时,其结果末尾必然包含多个0,求 n!(5≤n≤32726)末尾包含 0 的个数。
算法思路:n 较大时,n!的值将超出 long 类型范围,求出 n!的结果再数 0 的个数不现实。那么末尾的 0 到底是从哪里来的?每一个因子 5 与任一偶数相乘就会产生一个 0。所以末尾有多少 0 是由因子 5 的个数决定的,求出因子 5 的个数即是末尾 0 的个数。程序运行界面和代码如下所示。
(1)为使窗体加载时,窗体标题栏自动显示为“第 14 题程序”,则可以在 过程(填写过程名)中添加代码: Form1.Caption=”第 14 题程序”。
(2)实现上述算法的 VB 程序如下,请补充程序中划线处的代码。
Private Sub Command1Click()
Dim n As Integer
n = Val(Text1.Text) i = 1
Do While ①
s = s + n 5 ^ i i = i + 1
Loop
List1.AddItem Str(n) + “!末尾包含 0 的个数:” + ②
End Sub
(2) 根据上述算法,2018!末尾包含 0 的个数是 个。
参考答案:
(1) formload
(2) ①5^i<=n ②str(s) ③502
解析:
(1)此题考查事件处理过程名的命名格式:对象名_事件名。
(2)思路:1至n中每个数中包含5的因子数累加,等价于1至n中5的倍数中每个数5的因子数累加,提炼后等价于1至n中能被5整除的个数+能被5^2整除的个数+…+能被5^i整除的个数。①处满足循环的条件是:5的因子个数乘积小于等于n。
Python代码如下:
n=int(input(‘输入n:n’))
s=0
i=1while 5**i < n:
s=s+n//5**ii=i+1
print(str(n)+’!末尾0的个数:’,str(s))
Python代码运行结果如下: