Уведомления

Группа в Telegram: @pythonsu

#1 Май 7, 2016 18:06:50

Dmitry2013
Зарегистрирован: 2016-05-07
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Степень двойки

Всем доброго времени суток, начал изучать программирование, решаю ряд учебных задач и столкнулся с проблемой.
Задача:
По данному натуральному числу N найдите наибольшую целую степень двойки, не превосходящую N. Выведите показатель степени и саму степень.
Операцией возведения в степень пользоваться нельзя!
Мое решение:
n = int(input())
i = 0
while 2 ** i <= n:
i += 1
print(i, 2 ** i)

Для примера если n = 50, после выполнения этого кода получаю значения: 6 64, а должно быть 5 32, подскажите где у меня ошибка?

Офлайн

#2 Май 7, 2016 18:27:38

old_monty
Зарегистрирован: 2015-09-27
Сообщения: 238
Репутация: +  20  -
Профиль   Отправить e-mail  

Степень двойки

Ошибка на последнем шаге:

2 **5  <= 50    # условие выполняется,
   i +=1        # поэтому i увеличивается на 1
print(6, 2 **6)  # и выводится на печать

PS. И кстати, вы возводите 2 в степень i, хотя сами же в условии пишете, что операцией возведения в степень пользоваться нельзя!

Отредактировано old_monty (Май 7, 2016 18:31:38)

Офлайн

#3 Май 7, 2016 18:31:52

Firik
Зарегистрирован: 2015-12-02
Сообщения: 151
Репутация: +  6  -
Профиль   Отправить e-mail  

Степень двойки

Ошибка в том, что вы выводите результат, который выходит за условие 2**i<=n. Выводите n-1)

Офлайн

#4 Май 7, 2016 18:44:36

Dmitry2013
Зарегистрирован: 2016-05-07
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Степень двойки

Всем спасибо!

Офлайн

#5 Май 8, 2016 03:17:55

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9827
Репутация: +  852  -
Профиль   Отправить e-mail  

Степень двойки

Вообще, там должно умножение на 2 использоваться или сдвиг на 1.



Офлайн

#6 Ноя. 24, 2018 20:37:06

antontriespython
Зарегистрирован: 2018-11-19
Сообщения: 1
Репутация: +  1  -
Профиль   Отправить e-mail  

Степень двойки

n = int(input())
k = 0
p = 1
while p < n:
p = p * 2
k += 1
print(k)

Офлайн

#7 Март 3, 2019 17:33:48

dabasamboo94
Зарегистрирован: 2019-03-03
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Степень двойки

antontriespython
n = int(input())k = 0p = 1while p < n: p = p * 2 k += 1print(k)
Пожалуйста, объясните логику программы?
n = int(input()) # тут мы объявляем число
k = 0 # тут не понимаю
p = 1 # тут мы объявляем первоначальное значение р
while p < n: # пока р меньше n
p = p * 2 # увеличиваем р
k += 1 # при этом увеличивая k, но что это k?
print(k)

Офлайн

#8 Март 4, 2019 07:27:37

Rafik
Зарегистрирован: 2018-09-04
Сообщения: 231
Репутация: +  27  -
Профиль   Отправить e-mail  

Степень двойки

При каждом прохождении цикла идёт умножение на 2, что эквивалентно: каждое прохождение цикла - увеличивает степень двойки на 1. Как раз k считает количество прохождения цикла или, другими словами, степень двойки.
Здесь k показывает количество прохождения цикла, которое равно степени двойки, начиная с 2**0 (начальное значение k=0). Попробуй на листочке вручную выполнить несколько прохождений цикла и сравнить результат каждого хода с значением 2**k.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version