Программист Василий очень любит изучать свойства чисел. Он
даже сам придумал свойство – потенциал числа. Чтобы найти потенциал
числа N, надо взять двоичную запись этого числа (начинается с единицы),
рассмотреть все циклические сдвиги этой записи и среди них выбрать
максимальное число. Например, для N = 11: 10112 = 11, 11012 = 13, 11102 =
14 и 01112 = 7. Следовательно, потенциал числа 11 равен 14.
Указать ответ для N = 44.
Ответы
Ответ:
#Сначала определим функции
def ToBinary(n): #функция для перевода в двоичную запись
b = ""
while n > 0:
b = str(n % 2) + b
n = n // 2
return b
def ToDec(b): #функция для перевода из двоичной в десятичную запись
d = 0
for i in range(len(b)):
d += int(b[i])*2**(len(b) - i-1)
return d
def CycleShift(b): #функция для циклического сдвига
a = b[1:len(b)] #копируем строку с первого элемента до конца
a += b[0] #добавляем нулевой элемент в конец строки
return a
#Теперь перейдем к глобальному коду
n = int(input()) #Вводим исходное число
b = ToBinary(n) #переводим в двоичную запись
maxshift = n #выбираем исходное число как максимальное число в сдвиге
for i in range(len(b)): #Проверяем все циклические сдвиги для нахождения максимального
b = CycleShift(b)
r = ToDec(b) # переменная для хранения текущего значения циклически сдвинутого числа
if r > maxshift: # если полученное число в результате сдвига больше предыдущего в maxshift сохранить это значение в maxshift
maxshift = r
print("Результат",maxshift) #Вывод результата
Результаты:
44 - 101100
25 - 011001
50 - 110010
37 - 001011
11 - 001011
22 - 101100
В итоге получаем, что максимальное число это 50