|
121 / 109 / 29
Регистрация: 18.12.2010
Сообщений: 378
|
||||||
Наибольшая целая степень двойки, не превосходящая заданного числа n04.02.2013, 19:36. Показов 12042. Ответов 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
|
||
|
867 / 526 / 148
Регистрация: 03.02.2013
Сообщений: 1,845
|
|||||||
| 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
|
|
|
867 / 526 / 148
Регистрация: 03.02.2013
Сообщений: 1,845
|
||
| 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
|
|||||||||||
|
867 / 526 / 148
Регистрация: 03.02.2013
Сообщений: 1,845
|
||
| 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
Выяснить, что целая и дробная части заданного вещественного числа одинаковы
Напечатать все степени двойки, не превышающие заданного числа М Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|