Как перемножить некоторое количество чисел внутри числа
Функция принимает число N, и должна вернуть количество раз, которое вы должны умножить цифры между собой N, пока не получится одна цифра.
Пример:
9*9*9 = 729, 7*2*9 = 126, 1*2*6 = 12, 1*2 = 2
Мой код работает только в при вызове с двухзначным числом.
def persistence(n):
count = 0
while len(str(n)) > 1:
n=int(str(n)[0])*int(str(n)[1])
count+=1
return count
print(persistence(999))
Как реализовать для неограниченного кол-ва чисел? Если можно, то интересует именно через цикл while
Ответы (3 шт):
Автор решения: maestro
→ Ссылка
Цифры числа можно складывать в list, для этого можно написать отдельную функцию. А потом пробегать циклом по цифрам и умножать.
# Функция возвращает list из цифр числа
def digits(n):
digs =[]
while n != 0:
digs.append(n % 10)
n = n // 10
return digs
def persistence(n):
count = 0
while n > 9:
digs = digits(n)
mul = 1
# Здесь пробежимся циклом по цифрам и перемножим их
for digit in digs:
mul = mul * digit
n = mul
print('*'.join(map(str, digs)) + '=' + str(mul))
count+=1
return count
print(persistence(999))
Автор решения: Виктор
→ Ссылка
Что делать если будет цифра "0" - я буду её пропускать
def persistence(n):
def per(n, count):
newc = 1
if n < 10:
return (n, count)
while n > 10:
i = n % 10
if i > 0 :
print(f'{n % 10} * ', end='')
newc *= n % 10
count += 1
n = n // 10
print(f'{n}')
return per(newc * n, count)
(n,c) = per(n, 0)
return c
print(f'Answer: {persistence(999)}')
9 * 9 * 9
9 * 2 * 7
6 * 2 * 1
2 * 1
Answer: 7
print(f'Answer: {persistence(909)}')
9 * 9
1 * 8
Answer: 2
Автор решения: splash58
→ Ссылка
можно воспользоваться функцией reduce и преобразованием числа в строку цифр
from functools import reduce
def persistence(n):
count = 0
while n > 9:
n = reduce(lambda x, y: x*int(y), str(n), 1)
count += 1
return count
print(persistence(999))