Алгоритм получает на вход натуральное число N и строит по нему новое число R следующим образом:
1. Строится двоичная запись числа N.
2. В полученной записи все нули заменяются на единицы, все единицы — на нули. Из полученного числа удаляются ведущие нули.
3. Результат переводится в десятичную систему счисления.
4. Результатом работы алгоритма становится разность исходного числа N и числа, полученного на предыдущем шаге.
Пример. Дано число N = 22. Алгоритм работает следующим образом.
1. Строим двоичную запись: 2210 = 101102.
2. Заменяем цифры и удаляем ведущие нули: 10110 → 01001 → 1001.
3. Переводим в десятичную систему: 10012 = 910.
4. Вычисляем разность: 22 − 9 = 13.
Результат работы алгоритма R = 13.
При каком наименьшем N в результате работы алгоритма получится R = 999?
Приведём решение на языке Python.
for n in range(2, 10000):
s = bin(n)[2:] # перевод в двоичную систему
s = str(s)
s = s.replace('0','2')
s = s.replace('1','0')
s = s.replace('2','1')
s.strip("0")
s=int(s,2)
if n-s == 999:
print(n)
break
Ответ: 1011.

