Форум программистов, компьютерный форум CyberForum.ru

Наибольшая целая степень двойки, не превосходящая заданного числа n - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Переменные в c++ http://www.cyberforum.ru/cpp-beginners/thread778951.html
Помогите разобраться в теории. Так вот допустим мы создаем переменную в стеке int a; тогда в стеке где то по адресу скажем 004 выделяется 4 байта в которые записывается переменная в двоичном коде. Фррр а вот теперь вопрос а где храниться сам адрес 004 , откуда программа знает что переменная храниться в этом адресе? она что где то его сохраняет ?а если мы где то храним адрес то как мы узнаем...
C++ Написать рекурсивную процедуру перевода числа из десятичной системы в N –ю (2<= N <= 16) Написать рекурсивную процедуру перевода числа из десятичной системы в N –ю (2<= N <= 16) с циклами всё сделать гораздо проще, но вот задание такое, а рекурсию чёт я не особо втыкаю( http://www.cyberforum.ru/cpp-beginners/thread778948.html
C++ Дано предложение. Вывести все буквы м и н в нем
Дано предложение. Вывести все буквы м и н в нем. с помощью функций. С++
C++ Нахождение слова, по заданной букве
Дано предложение. Найти какое-нибудь слово, начинающееся на букву "к". С++
C++ Символы стоящие на чётных местах,заменить на букву Ы http://www.cyberforum.ru/cpp-beginners/thread778905.html
Дано предложение.Все его символы стоящие на чётных местах,заменить на букву Ы. Через С++
C++ Дайте, пожалуйста, контрпримеры Задача №93 в acmp задание в тему подробнее

Показать сообщение отдельно
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
04.02.2013, 20:15     Наибольшая целая степень двойки, не превосходящая заданного числа n
Цитата Сообщение от Asker Посмотреть сообщение
Мне нужно рассчитать наибольшую целую степень двойки, не превосходящую заданного числа n.
Например,
ввод 101
вывод 64

Есть код, который это делает:
C++
1
2
3
4
5
6
...
int n, t=1;
cin >> n;
for (;t<n;) t*=2;
cout << t/2;
...
, но в нём используются циклы, и он довольно медленный.
Кто знает, как можно сделать это еще быстрее (скорость принципиальна)
как минимум сходу можно заменить t*=2; на t=t<<1; сдвиг на порядок живее работает
потом у вас выводится не сама степень двойки а 2^(n-1), впринципе я бы двигал t, а не n:

C++
1
2
3
4
5
6
int t;
cin >> t;
int ts=t;
int n=0;
 
while (ts!=0) { ts=ts>>1; ++n;}
как-то так, на выходе будет чистая n

pow(2,n-1) соответственно даст Ваш 2^(n-1)
 
Текущее время: 18:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru