Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/470: Рейтинг темы: голосов - 470, средняя оценка - 4.87
0 / 0 / 1
Регистрация: 16.04.2012
Сообщений: 18

Определить, является ли данное число степенью двойки

19.06.2012, 20:08. Показов 96735. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Является ли данное число степенью двойки?
Формат входных данных
Вводится число.
Формат выходных данных
Напечатать YES, если оно является степенью двойки, Напечатать YES, если оно является степенью двойки, NO – иначе.
Примеры
input.txt output.txt
8 YES
22 NO
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.06.2012, 20:08
Ответы с готовыми решениями:

Определить, является ли число степенью двойки
Такая проблема: в проге мне нужно задать количество чисел которые я введу (т.е создать массив под них), потом ввести числа и оно должно мне...

Определить, является ли число степенью двойки
По заданному положительному числу n < 2^64 определить, является ли оно степенью двойки. Решение должно иметь сложность O(1). 1 ...

Определить является ли число степенью двойки
Стоит задача Ввести число. Определить является ли оно степенью 2 (число 16 является, а 22 нет)

17
Эксперт С++
 Аватар для MikeSoft
3956 / 1811 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
20.06.2012, 02:48
varkich, а что у вас не получается?
Определить, является ли число степенью двойки, очень просто:
C++
1
2
3
4
5
6
7
8
9
bool PowerOfTwo(int &Value)
{
  int InitValue = 1;
  while (InitValue < Value)
    InitValue *= 2;
  if (InitValue == Value)
    return true;
  return false;
}
О том, как прикрутить чтение из файла, материала уйма. Пару строчек кода.
1
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
20.06.2012, 03:14
Цитата Сообщение от MikeSoft Посмотреть сообщение
число степенью двойки, очень просто:
даже еще проще
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
bool VerifyDecimal(int value)
{
  if(value<=0)
    return false; 
while((value%2)==0)
{
 
 if((value/=2)==1)
    return true;
}
return false;
 
}
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
20.06.2012, 04:48
Где-то видел примерно такой код
C++
1
2
3
4
bool is_exp_of_2(int n)
{
    return ( n & (n - 1) ) == 0;
}
1
 Аватар для enk
47 / 46 / 26
Регистрация: 16.06.2012
Сообщений: 177
20.06.2012, 05:17
Цитата Сообщение от diagon Посмотреть сообщение
Где-то видел примерно такой код
C++
1
2
3
4
bool is_exp_of_2(int n)
{
    return ( n & (n - 1) ) == 0;
}
Работает, если степень <= 30.
C++
1
2
is_exp_of_2(pow(2, 31)); // 0
is_exp_of_2(8589934591); // 1
0
7 / 7 / 1
Регистрация: 16.12.2010
Сообщений: 23
20.06.2012, 06:11
Цитата Сообщение от enk Посмотреть сообщение
Работает, если степень <= 30.
C++
1
2
is_exp_of_2(pow(2, 31)); // 0
is_exp_of_2(8589934591); // 1
А как вы собираетесь 2^31 записать в int? Для float естественно не работает, там представление числа совсем другое. По этой же причине 2^33-1 записывается в int неправильно и воспринимается как степень двойки.
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
20.06.2012, 06:24
Цитата Сообщение от diagon Посмотреть сообщение
Где-то видел примерно такой код
C++
1
2
3
4
bool is_exp_of_2(int n)
{
 return ( n & (n - 1) ) == 0;
}
n =1 и
1&0==0 истина
ну если представить что единица это 2 в 0 то можно так сказать
ну а 0
0&0xFFFFFFFF тоже рано нулю но нуль то не степень двойки

Добавлено через 3 минуты
Цитата Сообщение от Xorboo Посмотреть сообщение
А как вы собираетесь 2^31 записать в int?
в int нельзя а в unsigned int запросто
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
20.06.2012, 06:39
Цитата Сообщение от ValeryS Посмотреть сообщение
n =1
Ну так 1 = 2^0
Для 0 такой алгоритм не сработает, нужно дополнительное условие вводить.
1
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
20.06.2012, 07:21
Ещё проще. Надо сосчитать единицы в двоичном коде числа, который есть его внутреннее представление.

Добавлено через 29 секунд
Цитата Сообщение от diagon Посмотреть сообщение
Для 0 такой алгоритм не сработает, нужно дополнительное условие вводить.
А с каких пор 0 стал степенью двойки?
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
20.06.2012, 10:27
Цитата Сообщение от taras atavin Посмотреть сообщение
Ещё проще. Надо сосчитать единицы в двоичном коде числа, который есть его внутреннее представление.
на бумаге проще, а на языке?
опять цикл?
Цитата Сообщение от taras atavin Посмотреть сообщение
А с каких пор 0 стал степенью двойки?
а ни с какой
но вот этот код подумает что да
C++
1
2
3
4
bool is_exp_of_2(int n)
{
    return ( n & (n - 1) ) == 0;
}
Цитата Сообщение от Xorboo Посмотреть сообщение
По этой же причине 2^33-1 записывается в int неправильно
вообще то там идет округление и 2^33-1==2^33 (почему и не пользуются плавающими в бухгалтерии)

Добавлено через 5 минут
diagon, слушай а ведь отрицательные не могут быть степенью двойки
может лучше использовать
bool is_exp_of_2(unsigned int n)
0
 Аватар для Olga_
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
20.06.2012, 10:40
Цитата Сообщение от taras atavin Посмотреть сообщение
Ещё проще. Надо сосчитать единицы в двоичном коде числа, который есть его внутреннее представление.
В алгоритме diagon это и учитывается с помощью битовой операции &. Простой и красивый алгоритм без лишних циклов. Работает только с положительными числами. для 0 дополнительную проверку нужно.

Цитата Сообщение от ValeryS Посмотреть сообщение
а ведь отрицательные не могут быть степенью двойки
да, верно, поэтому вот алгоритм:
C
1
2
3
4
int deg_of_2(long x)
{
    return (x <= 0) ? 0 : (x & (x-1)) == 0;    
}
1
0 / 0 / 0
Регистрация: 06.04.2015
Сообщений: 122
12.04.2015, 02:35
а только используя while это можно написать? просто нашел задачи под темой цикла while и там такое задание стоит вторым номером
http://informatics.mccme.ru/mo... php?id=550
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
12.04.2015, 19:04
Цитата Сообщение от Dima2282 Посмотреть сообщение
используя while это можно написать?
тему то читал? первые два сообщения и есть решение с while
0
51 / 0 / 0
Регистрация: 08.12.2014
Сообщений: 6
20.06.2015, 00:03
return x && ((x & (x - 1)) == 0);

Добавлено через 6 минут
или еще
return ((x != 0) && ((x & (~x + 1)) == x));
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
20.06.2015, 00:37
MaxKrivich, чем вариант x & (x - 1) == 0 хуже?
0
0 / 0 / 0
Регистрация: 12.02.2019
Сообщений: 24
14.02.2019, 15:57
А как такую задачу можно решить используя только for, if (без while и без побитовых операторов)?
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
14.02.2019, 16:14
Vik1002, можно.
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
14.02.2019, 23:39
Vik1002, прошу прощения, код забыл прикрепить.
C++
1
2
3
4
5
6
7
8
bool isPowerOfTwo(unsigned int x) {
    if (x == 0) {
        return false;
    }
 
    for (; x % 2 == 0; x /= 2);
    return (x == 1);
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.02.2019, 23:39
Помогаю со студенческими работами здесь

Определить, является ли число степенью двойки (циклы)
Вводится число. Определить, является ли оно степенью двойки. ( с помощью цикла) Думала примерно так, но знаю не правильно ...

Определить, является ли число точной степенью двойки
Задание: Выведите слово &quot;YES&quot;, если число N является точной степенью двойки, или слово &quot;NO&quot; в противном случае. Операцией...

Определить, является ли число целой степенью двойки
Задано целое положительное число.Определить, является ли оно целой степенью двойки. Вход 1 16 1028 1024 Выход Yes

Определить, является ли заданное число точной степенью двойки
Дано натуральное число N. Вывести слово YES, если число N является точной степенью двойки, или слово NO в противном случае. При решении...

Вводится число. Определить, является ли оно степенью двойки.
Вводится число. Определить, является ли оно степенью двойки. Необходимо использовать Операторы цикла ! Спасибо за внимание!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru