求N!的十进制表示中末尾0的个数 (python实现)

来源:互联网 发布:vba有数据库吗 编辑:程序博客网 时间:2024/05/18 00:34

问题1,求N!的十进制表示中末尾0的个数。
直接求出N!不太现实,很容易溢出。这个问题比较容易想到的是,因为2X5=10,所以可以求N!含有的因子2和因子5的个数。可以这样表示N!=2x * 3y * 5z * 7a*...,在这个表达式中,我们容易得出x > z,因此只需要计算N!中含有因子5的个数,进而可以转化成计算1-N这N个数含有因子5的个数之和

下面的算法就需要好好考虑如下事实:

1-N这N个数中有N/5个数是5的倍数
1-N这N个数中有N/52个数是52的倍数
1-N这N个数中有N/53个数是53的倍数
...
这样就比较明了了,容易得到如下算法:

def main():    numbers=[]    count=0    while True:        try:            a = input()            k=cal(int(a))            numbers.append(int(k))            count+=1        except:            break    for i in range(count):        print(numbers[i])def cal(a):    b=a    k=0    while True:        if b>0:            b=int(b/5)            k+=b        else:            break    return kmain()



原创粉丝点击