|
121 / 109 / 29
Регистрация: 18.12.2010
Сообщений: 378
|
||||||
Наибольшая целая степень двойки, не превосходящая заданного числа n04.02.2013, 19:36. Показов 12210. Ответов 18
Метки нет (Все метки)
Мне нужно рассчитать наибольшую целую степень двойки, не превосходящую заданного числа n.
Например, ввод 101 вывод 64 Есть код, который это делает:
Кто знает, как можно сделать это еще быстрее (скорость принципиальна)
0
|
||||||
| 04.02.2013, 19:36 | |
|
Ответы с готовыми решениями:
18
Найти наибольшую степень двойки, не превышающую заданного числа n Вычисление максимальную степень двойки двоичного числа
|
|
Каратель
|
|
| 04.02.2013, 19:47 | |
|
0
|
|
|
121 / 109 / 29
Регистрация: 18.12.2010
Сообщений: 378
|
|
| 04.02.2013, 19:57 [ТС] | |
|
Там не совсем то. Мне наибольшую надо найти
0
|
|
|
Каратель
|
||
| 04.02.2013, 20:11 | ||
|
0
|
||
|
870 / 529 / 149
Регистрация: 03.02.2013
Сообщений: 1,859
|
|||||||
| 04.02.2013, 20:15 | |||||||
|
потом у вас выводится не сама степень двойки а 2^(n-1), впринципе я бы двигал t, а не n:
pow(2,n-1) соответственно даст Ваш 2^(n-1)
0
|
|||||||
|
121 / 109 / 29
Регистрация: 18.12.2010
Сообщений: 378
|
|
| 04.02.2013, 20:15 [ТС] | |
|
Jupiter, это если я введу число 224 - 1 = 16 777 216, то что же, по циклу перебирать 8 388 607 чисел? Наверно, есть способ побыстрее, вот только какой?
0
|
|
|
870 / 529 / 149
Регистрация: 03.02.2013
Сообщений: 1,859
|
||
| 04.02.2013, 20:21 | ||
|
да, и юзайте не pow, а ts = (2 << n-1); тогда в ts будет нужное вам число
0
|
||
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
||||||
| 04.02.2013, 20:25 | ||||||
|
Способ, конечно, есть. Сдвигать число на один разряд, пока оно не превратится в 0 и накапливать результаты операцией OR. Получится минимальная степень двойки, превышающая заданное число, за вычетом единицы. Сдвигаем результат и добавляем единицу - получаем искомое.
1
|
||||||
|
121 / 109 / 29
Регистрация: 18.12.2010
Сообщений: 378
|
|||||||||||
| 04.02.2013, 21:15 [ТС] | |||||||||||
|
Nick Alte, это то, что нужно
![]() Только у Вас небольшая опечатка, из-за которой функция не работала:
Добавлено через 4 минуты abit, Вы используете возведение в степень, а она очень тяжело работает... Добавлено через 3 минуты Хотя нет! если объединить присваивания, а вместо цикла for написать while, я думаю так быстрее будет на уровне машинного кода:
0
|
|||||||||||
|
870 / 529 / 149
Регистрация: 03.02.2013
Сообщений: 1,859
|
||
| 04.02.2013, 21:16 | ||
0
|
||
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
| 04.02.2013, 21:27 | |
|
0
|
|
|
121 / 109 / 29
Регистрация: 18.12.2010
Сообщений: 378
|
||||||||||||
| 04.02.2013, 21:39 [ТС] | ||||||||||||
|
Хотя... если переделать мой самый первый вариант (вместо умножения - сдвиг). А вот интересно, что быстрее:
Это
![]() Добавлено через 27 секунд
0
|
||||||||||||
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
||
| 04.02.2013, 21:57 | ||
|
0
|
||
|
63 / 58 / 14
Регистрация: 14.12.2011
Сообщений: 193
|
|
| 04.02.2013, 21:57 | |
|
А логарифм можно использовать? Если да тогда double к int, а потом 2 << ( результат - 1 )
0
|
|
|
121 / 109 / 29
Регистрация: 18.12.2010
Сообщений: 378
|
|||||||||||
| 04.02.2013, 22:27 [ТС] | |||||||||||
|
Это подойдет?
Добавлено через 25 минут Люди, я провел эксперимент. Я перебрал все числа от 2 до 1000000 и искал требуемую степень двойки, используя сначала первый способ, затем второй Я запустил на Visual C++ сначала этот код:
Потом я запустил этот код:
Значит ли это, что первый способ был быстрее? о.О ЗЫ. В посту #12 я ошибся, сдвигая на 2 разряда, а не на 1. при эксперименте я это исправил. Во время эксперимента выгрузил из винды посторонние проги и даже мышой не шевелил для чистоты эксперимента
0
|
|||||||||||
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
||||||
| 04.02.2013, 23:01 | ||||||
|
Как вариант:
1
|
||||||
|
1 / 1 / 0
Регистрация: 24.02.2019
Сообщений: 8
|
||||||
| 24.02.2019, 17:24 | ||||||
0
|
||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||||||||||
| 24.02.2019, 19:55 | |||||||||||
|
ну как в с++ сделать не представляю, пока не добрался до побитовых операций, но суть такая, используя маску, выделяете старший бит числа, затем сдвигаете его вправо до нуля, каждый сдвиг инкрементирует счетчик, значение счетчика и есть степень двойки
Добавлено через 3 минуты это на ассемблере проще сделать Добавлено через 1 час 11 минут хотя разобрался, ничего сложного:
хотя разобрался, ничего сложного:
Asker, и кстати, с тебя 100 рублей
0
|
|||||||||||
|
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
|
|
| 24.02.2019, 20:03 | |
|
1
|
|
| 24.02.2019, 20:03 | |
|
Помогаю со студенческими работами здесь
19
Выяснить, что целая и дробная части заданного вещественного числа одинаковы
Напечатать все степени двойки, не превышающие заданного числа М Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает
Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|