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

xiaoxiao2021-02-28  65

问题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 k main()

转载请注明原文地址: https://www.6miu.com/read-81929.html

最新回复(0)