Дам 100 баллов(Питон)
Алиса учится работать с двоичными числами. Она уже поняла, что число в двоичной записи получается в несколько раз длиннее, чем в десятичной. А еще она поняла, что нули писать дольше чем единицы. И теперь ее любимые числа — это те, двоичная запись которых содержит как можно больше единиц. Алисе дали задание — выбрать одно произвольное число из заданного закрытого интервала [a;b][a;b] и перевести его в двоичную запись. И теперь Алиса просит, чтобы вы написали программу, которая найдет в этом интервале число, двоичная запись которого содержит наибольшее количество единиц. Если таких чисел будет несколько, то Алиса будет рада любому из них.
Формат входных данных
На вход через пробел подаются два натуральных числа aa и bb. При этом 1\leq a\leq b \leq 10^{18}1≤a≤b≤10
18
.
Формат выходных данных
Программа должна вывести одно целое число из заданного диапазона, двоичная запись которого содержит наибольшее количество единиц. Само число следует выводить в десятичной записи.
Answers & Comments
numbers = input(" ").split(" ")
number_maximum = "0|0"
number_max = int(numbers[1])
number_min = int(numbers[0])
number_now = number_min
while number_now < number_max+1:
number_now2 = bin(number_now)
if int(number_maximum.split("|")[1]) < len([x for x in number_now2 if str(x) == "1"]):
number_maximum = f"""{number_now}|{len([x for x in number_now2 if str(x) == "1"])}"""
number_now = number_now + 1
number_now2 = []
print(number_maximum.split("|")[0])
[ ] Test #2. Runtime error
[ ] Test #3. Runtime error
[ ] Test #4. Runtime error
[ ] Test #5. Runtime error
[ ] Test #6. Runtime error
[ ] Test #7. Runtime error
[ ] Test #8. Runtime error
[ ] Test #9. Runtime error
[ ] Test #10. Runtime error
Ответ:
a, b = map(int, input().split())
k = 1
while b > k:
k *= 2
res = k-1
while res > b or a > res:
k //= 2
if a > res:
res += k
else:
res -= k
print(res)
Объяснение: