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