Write a program that will calculate the number of trailing zeros in a factorial of a >given number.
N! = 1 * 2 * 3 * ... * N
Be careful 1000! has 2568 digits...
Examples
zeros(6) = 1
#6! = 1 * 2 * 3 * 4 * 5 * 6 = 720 --> 1 trailing zero
zeros(12) = 2
#12! = 479001600 --> 2 trailing zerosHint: You're not meant to calculate the factorial. Find another way to find the number of zeros.
題目理解:給定一數字n,返還**n!**的結尾有幾個0。
基本上不太能直接計算出n!的值,不然測試時可能會超出codewars的大數限制!
首先尾數存在0的情況,必定是有偶數去乘上5所造成。可以理解為只要偶數乘上一個數字,其因數存在5即可產生尾數0。而產生的尾數0會與該數字中含有因數5的數量相同,例:25=5X5 , 4X25=100
故n!的因數中,含有的5的數量即為尾數的0個數。
def zeros(n):
a = 0
result = 0
#計算5的a次方中,存在於範圍1~n中的最大值
while 5**(a+1) < n:
a+=1
#n//5 即為1~n中含有的5^1的倍數的數量
#n//25 即為1~n中含有5^2的倍數的數量,因先前已先在5^1計算過一次故reslut再+1即可,後續以此類推
for i in range(1,a+1):
result += (n//(5**i))
return result