iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0
自我挑戰組

Udemy課程上完你也可以開始Codewars 30天系列 第 7

[Day7] Codewars >>> Number of trailing zeros of N!(Python)

  • 分享至 

  • xImage
  •  

題目(6kyu):

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 zeros

Hint: 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

上一篇
[Day6] Codewars >>> Two Sum (Python)
下一篇
[Day8] Codewars >>> Build a pile of Cubes (Python)
系列文
Udemy課程上完你也可以開始Codewars 30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言