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