Computer >> Máy Tính >  >> Lập trình >> Python

Tìm số 0 liên tiếp ở cuối sau khi nhân n số trong Python


Giả sử chúng ta có một mảng với n số, chúng ta phải trả về số 0 liên tiếp ở cuối sau khi nhân tất cả n số.

Vì vậy, nếu đầu vào là [200, 20, 5, 30, 40, 14], thì đầu ra sẽ là 6 là 200 * 20 * 5 * 30 * 40 * 14 =336000000, có sáu số 0 ở cuối.

Để giải quyết vấn đề này, chúng ta sẽ làm theo các bước sau -

  • Xác định một hàm count_fact_two (). Điều này sẽ mất n

  • đếm:=0

  • trong khi n mod 2 là 0, thực hiện

    • count:=count + 1

    • n:=n / 2 (chỉ thương số dưới dạng số nguyên)

  • số lần trả lại

  • Định nghĩa một hàm count_fact_five (). Điều này sẽ mất n

  • đếm:=0

  • trong khi n mod 5 là 0, thực hiện

    • count:=count + 1

    • n:=n / 5 (chỉ thương số dưới dạng số nguyên)

  • số lần trả lại

  • Từ phương thức chính, thực hiện như sau -

  • n:=kích thước của A

  • twos:=0, fives:=0

  • đối với tôi trong phạm vi từ 0 đến n, hãy thực hiện

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

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

  • if twos - fives, then

    • trả lại hai lần

  • nếu không,

    • trả lại fives

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

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))

Đầu vào

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

Đầu ra

6