Created
November 4, 2018 14:30
-
-
Save superkiria/b2d3c08ff924323b68816df38e7ca445 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# будем делить заданное число на числа меньше 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