Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Задачa I-log2(N) помогите решить

あなたの自我を放 っておいてください Ученик (51), на голосовании 3 недели назад
Дано целое число
N , найдите наибольшее целое число k , такое что 2 k ≤ N .

Формат входных данных
Дано целое число
N ( 1 ≤ N ≤ 10 18 ).

Формат результата
Выведите одно число — искомое число k .

Примеры
Входные данные
6
Результат работы
2
Входные данные
1
Результат работы
0
Дополнен 1 месяц назад
и еще нужно решить задачу на питоне используя тему Вещественные числа и математические функции
Голосование за лучший ответ
Руслан Волков Знаток (478) 1 месяц назад
Один из способов решения - это использовать цикл, который увеличивает значение k до тех пор, пока 2^k меньше или равно N. Как только это условие перестает выполняться, вы выходите из цикла, и последнее значение k будет искомым результатом.

Вот пример кода на Pascal ABC:
program I_log2_N;

var
N, k: int64;

begin
// Ввод числа N
readln(N);

// Инициализация начального значения k
k := 0;

// Поиск наибольшего целого числа k
while (1 shl k) <= N do
k := k + 1;

// Вывод результата
writeln(k - 1);
end.

Этот код считывает число N, затем в цикле увеличивает значение k, пока 2^k меньше или равно N. После завершения цикла выводится результат (k - 1), так как нас интересует максимальное целое число k, для которого 2^k ≤ N.
Jurijus Zaksas Искусственный Интеллект (429955) 1 месяц назад
Я так понимаю, что у тебя там возведение в степень где-то потерялось?
 import math 

n = int(input())
print(int(math.log(n)/math.log(2)))
Если боишься округлений, особенно на больших числах, можно ввести дополнительную проверку:
 import math 

n = int(input())
k = int(math.log(n)/math.log(2))
if (2**(k+1) == n):
k = k + 1
print(k)
あなたの自我を放 っておいてくださいУченик (51) 1 месяц назад
ошибка в 4 тесте
Jurijus Zaksas Искусственный Интеллект (429955) Это мне ни о чем не говорит, мне твои тесты отсюда не видно. Может, это у тебя в тесте ошибка.
Похожие вопросы