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

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

19.06.2012, 20:08. Показов 97141. Ответов 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
3957 / 1812 / 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
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
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
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
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
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
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
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
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
Ответ Создать тему
Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru