Cho mảng n số. Trả về số chữ số 0 liên tiếp ở cuối sau khi nhân tất cả các số.
Ví dụ: [200, 20, 5, 30, 40, 14] -> tích = 336000000 -> 6 chữ số 0.
Thuật toán giải quyết
- Số chữ số 0 ở cuối = min(số ước 2, số ước 5) trong tích.
- Hàm
count_fact_two(n): đếm số lần chia hết cho 2. - Hàm
count_fact_five(n): đếm số lần chia hết cho 5. - Tổng
twosvàfivescho tất cả phần tử. - Trả về
min(twos, fives).
Ví dụ minh họa
def count_fact_two(n):
count = 0
while n % 2 == 0:
count += 1
n //= 2
return count
def count_fact_five(n):
count = 0
while n % 5 == 0:
count += 1
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])
return min(twos, fives)
A = [200, 20, 5, 30, 40, 14]
print(get_consecutive_zeros(A)) # 6
Đầu vào
[200, 20, 5, 30, 40, 14]
Đầu ra
6