Skip to content

Instantly share code, notes, and snippets.

@superkiria
Created November 4, 2018 14:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save superkiria/b2d3c08ff924323b68816df38e7ca445 to your computer and use it in GitHub Desktop.
Save superkiria/b2d3c08ff924323b68816df38e7ca445 to your computer and use it in GitHub Desktop.
# будем делить заданное число на числа меньше 10, то есть цифры
# если будет получаться деление, то записываем делитель в ответ и продолжаем ту же работу с частным
# рекурсия здесь выглядит красивее!
# основная рекурсивная функция
def recur(n):
if n == 1:
return '' # если один, то возвращаем пустоту, так как это значит, что мы дошли до 1 и заканчиваем цикл делений
for i in range(9, 1 ,-1): # пробуем делить на 9, 8, 7 ...
if n % i == 0:
return recur(n / i) + str(i) # если получилось, то дальше продолжим с частным
return '!' # если мы здесь, то у нас простое число, возвращаем восклицательный знак
# так как recur(n) не будет давать окончательный ответ, на 33 она вернёт !3, то нужна обёртка:
def task_2(n):
if n < 1: # исключаем ненатуральные числа по условию
return -1
if n < 10: # если на входе одна цифра, то она и есть ответ
return n
result = recur(n) # запускаем рекурсию
if result[0] == '!': # если впереди есть !, то ответ -1
return -1
return int(result)
test_set = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 33, 34, 100, 168, 216, 324, 330, 432, 648, 1000, 2520, 4212, 7350, 21600, 30240, 1000000, 10**9)
for i in test_set:
print('Metod 2: N =', i, ' - Answer =', task_2(i))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment