Как подсчитать количество нулей на конце числа?
Подскажите пожалуйста алгоритм решения данной задачи.
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