在Python中計算n個數相乘後末尾連續零的個數


假設我們有一個包含n個數字的陣列,我們需要返回所有n個數字相乘後末尾連續零的個數。

例如,如果輸入是[200, 20, 5, 30, 40, 14],則輸出為6,因為200 * 20 * 5 * 30 * 40 * 14 = 336000000,末尾有六個0。

為了解決這個問題,我們將遵循以下步驟:

  • 定義一個函式`count_fact_two()`。它將接收一個數字n作為引數。

  • 計數器 := 0

  • 當n模2等於0時,重複執行:

    • 計數器 := 計數器 + 1

    • n := n / 2 (只取整數商)

  • 返回計數器

  • 定義一個函式`count_fact_five()`。它將接收一個數字n作為引數。

  • 計數器 := 0

  • 當n模5等於0時,重複執行:

    • 計數器 := 計數器 + 1

    • n := n / 5 (只取整數商)

  • 返回計數器

  • 在主方法中,執行以下操作:

  • n := A的長度

  • twos := 0, fives := 0

  • 對於i從0到n,重複執行:

    • twos := twos + count_fact_two(A[i])

    • fives := fives + count_fact_five(A[i])

  • 如果 twos > fives,則

    • 返回 twos

  • 否則,

    • 返回 fives

示例

讓我們來看下面的實現,以便更好地理解:

線上演示

def count_fact_two( n ):
   count = 0
   while n % 2 == 0:
      count+=1
      n = n // 2
   return count
def count_fact_five( n ):
   count = 0
   while n % 5 == 0:
      count += 1
      n = n // 5
   return count
def get_consecutive_zeros(A):
   n = len(A)
   twos = 0
   fives = 0
   for i in range(n):
      twos += count_fact_two(A[i])
      fives += count_fact_five(A[i])
   if twos < fives:
      return twos
   else:
      return fives
A = [200, 20, 5, 30, 40, 14]
print(get_consecutive_zeros(A))

輸入

[200, 20, 5, 30, 40, 14]

輸出

6

更新於:2020年8月27日

202 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.