Как подсчитать количество нулей на конце числа?

Подскажите пожалуйста алгоритм решения данной задачи.

def end_zeros(num: int) -> int:
    return None

if __name__ == '__main__':
    print("Example:")
    print(end_zeros(0))

    assert end_zeros(0) == 1
    assert end_zeros(1) == 0
    assert end_zeros(10) == 1
    assert end_zeros(101) == 0
    assert end_zeros(245) == 0
    assert end_zeros(100100) == 2
    print("Coding complete? Click 'Check' to earn cool rewards!")

Ответы (5 шт):

Автор решения: GGO

Будём считать количество нулей следующим образом: Если число делится на 10, то делить его и увеличивать значение переменной countZero - иначе нету смысла искать нули, их попросту нет)

По правилу делимости на 10 следует, что если число оканчивается на "0" то число делится на "10".

Краткое решение на python:

n = int(input())

if (n == 0): 
    print(1)
    exit()

countZero = 0
while (n % 10 == 0):
    n //= 10
    countZero += 1

print(countZero)
→ Ссылка
Автор решения: CrazyElf

Как вариант однострочник просто по приколу. Тесты из условия проходит, но работает не оптимально, конечно:

def end_zeros(num: int) -> int:
    return min((i for i,c in enumerate(str(num)[::-1], 0) if c != '0'), default=1)

Это по алгоритму "преобразовать число в строку, потом идти циклом от конца строки и считать символы '0'", указанному insolor.

→ Ссылка
Автор решения: dIm0n

Вот так вот:

def end_zeros(num: int) -> int:
    return len(str(num)) - len(str(num).rstrip('0'))

if __name__ == '__main__':
    print("Example:")
    print(end_zeros(0))

    assert end_zeros(0) == 1
    assert end_zeros(1) == 0
    assert end_zeros(10) == 1
    assert end_zeros(101) == 0
    assert end_zeros(245) == 0
    assert end_zeros(100100) == 2
    print("Coding complete? Click 'Check' to earn cool rewards!")
→ Ссылка
Автор решения: MBo

Или так:

def end_zeros(n):
    return 0 if n%10 else 1+(end_zeros(n//10) if n else 0)
→ Ссылка
Автор решения: AndroID

Один из вариантов, и без деления.

def countendszero(number):
    number = str(number)
    i = len(number) - 1
    r = 0
    while i >= 0 :
        digit = number[i]
        if digit == "0" :
            r += 1
        else :
            break
        i -= 1
    return r

print(countendszero(100))
# 2
→ Ссылка