Алгоритм получает на вход натуральное число и строит по нему новое число следующим образом:
-
Строится двоичная запись числа .
-
В полученной записи все нули заменяются на единицы, все единицы –на нули. Из полученного числа удаляются ведущие нули.
-
Результат переводится в десятичную систему счисления.
-
Результатом работы алгоритма становится разность исходного числа и числа, полученного на предыдущем шаге.
Пример. Дано число = 22. Алгоритм работает следующим образом:
-
Строим двоичную запись: 2210 = 101102.
-
Заменяем цифры и удаляем ведущие нули: 10110 → 01001 → 1001.
-
Переводим в десятичную систему: 10012 = 910.
-
Вычисляем разность: 22 – 9 = 13.
Результат работы алгоритма = 13.
При каком наименьшем в результате работы алгоритма получится = 979?
Решение:
Решение на Python:
otv = []
for N in range(1, 100000):
s = bin(N)[2:]
s = s.replace('0', ' ')
s = s.replace('1', '0')
s = s.replace(' ', '1')
R = N - int(s, 2)
if R == 979:
otv.append(N)
print(min(otv))
Ответ: 1001