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

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

20.02.2017, 19:25. Показов 7880. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Такая проблема: в проге мне нужно задать количество чисел которые я введу (т.е создать массив под них), потом ввести числа и оно должно мне вывести те числа из введенных, которые являются степенью двойки.
Только что-то я туплю и не то делаю, в результате мне просто выводит какую-то шляпу и все. Подскажете что не так? Вот то что есть
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    unsigned int size = 0;
    cout << "Введите количество чисел";
    cin >> size;
    int *mas = new int[size];
 
    for (int i = 0; i < size; ++i)
    {
        cout << "Введите числа: ";
        cin >> mas[i];
    }
 
    for (int i = 0; i < size; i++)
    {
        while ((mas[i] % 2) == 0)
        {
            if ((mas[i] /= 2) == 1)
                cout << "Число" << mas[i] << "является степенью двойки";
        }
    }
    system("pause");
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.02.2017, 19:25
Ответы с готовыми решениями:

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

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

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

4
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
20.02.2017, 19:55
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int size = 0;
    cout << "Введите количество чисел";
    cin >> size;
    int *mas = new int[size];
 
    for (int i = 0; i < size; ++i)
    {
        cout << "Введите "<<i<<" число:";
        cin >> mas[i];
    }
 
    for (int i = 0; i < size; i++)
    {
        int k=mas[i];
        while(k>1)
        {
            if(k%2!=0)
            {
                cout << "Число" << mas[i] << "не является степенью двойки\n";
                break;
            }
            k/=2;
        }
        if(k==1)
            cout << "Число" << mas[i] << "является степенью двойки\n";
 
    }
   delete[] mas;
    system("pause");
    return 0;
}
1
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
20.02.2017, 19:55
См. ссылки внизу страницы.
0
0 / 0 / 1
Регистрация: 11.02.2016
Сообщений: 20
20.02.2017, 19:59  [ТС]
Спасибо
0
70 / 70 / 35
Регистрация: 06.07.2016
Сообщений: 415
20.02.2017, 21:12
Цитата Сообщение от Blacked Out Посмотреть сообщение
которые являются степенью двойки
Есть другое решение, основанное на том, что число, являющееся n-й степенью двойки при представлении в двоичной системе счисления записывается как какое-то количество нулей, единица и снова n нулей.
То есть, если имеем 8 бит, то 1 = 00000001 - это 2 в нулевой степени, после единицы следует 0 нулей.
Возьмем 8 = 00001000 - 2 в третьей степени, снова же - нули, единица и три нуля.
Если же мы из числа, которое является степенью двойки отнимем единицу, мы получим число, где та сама ведущая единица заменится нулем, а после нее будут следовать единицы.
8 - 1 = 00001000 - 00000001 = 00000111.
16 - 1 = 00010000 - 00000001 = 00001111.
Если же теперь применить операцию битового "И" к числу которое было (обозначим его number) и к числу, которое получается при уменьшении на единицу (number - 1), то в случае, если number - степень двойки, результатом битового "И" всегда будет являться нуль (Ну, берем случай, если number > 0 ).
То есть :
number = 16 = 00010000
number - 1 = 15 = 00001111
00010000 & 00001111 = 00000000 (Напомню, что побитовое И дает единицу только в случае, если соответствующие биты обоих чисел равны 1).
Вот здесь - программная реализация, которая экономит кучу итераций и времени, как следствие (Учитываем случай number <=0 , в этом случае сразу вернем 0) :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
 
bool is_pow_of_two(const int &number);
void get_array(int *array,const size_t &capacity);
int main()
{
   size_t quantity;
   std :: cout << "Input the quantity of numbers which you will input : ";
   std :: cin >> quantity;
 
   auto array = new int [quantity];
   get_array(array, quantity);
 
   std :: cout << "Here is the numbers which can be presented as the natural power of 2 : " << std :: endl;
   for (size_t counter = 0 ; counter < quantity; counter++)
   {
        if (is_pow_of_two(array[counter]))
          {
            std :: cout << array[counter] << '\t';
          }
   }
 
   delete [] array;
}
 
void get_array(int *array, const size_t &capacity)
{
  for (size_t counter = 0 ; counter < capacity; counter++)
    {
      std :: cout << "Input the " << counter << " number : ";
      std :: cin >> array[counter];
    }
}
 
bool is_pow_of_two(const int &number)
{
  return number <= 0 ? 0 : (number & (number - 1)) == 0;
}
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.02.2017, 21:12
Помогаю со студенческими работами здесь

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

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

Определить, является ли данное число степенью двойки
Является ли данное число степенью двойки? Формат входных данных Вводится число. Формат выходных данных Напечатать YES, если оно...

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru