Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Blacked Out
0 / 0 / 1
Регистрация: 11.02.2016
Сообщений: 15
1

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

20.02.2017, 19:25. Просмотров 753. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2017, 19:25
Ответы с готовыми решениями:

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

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

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

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

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

4
zss
Модератор
Эксперт С++
7366 / 6772 / 4284
Регистрация: 18.12.2011
Сообщений: 17,901
Завершенные тесты: 1
20.02.2017, 19:55 2
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
likehood
966 / 815 / 390
Регистрация: 25.12.2016
Сообщений: 2,691
Завершенные тесты: 3
20.02.2017, 19:55 3
См. ссылки внизу страницы.
0
Blacked Out
0 / 0 / 1
Регистрация: 11.02.2016
Сообщений: 15
20.02.2017, 19:59  [ТС] 4
Спасибо
0
Notoriously
69 / 69 / 35
Регистрация: 06.07.2016
Сообщений: 414
20.02.2017, 21:12 5
Цитата Сообщение от 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
20.02.2017, 21:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2017, 21:12

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

Является ли число степенью двойки
Условие: Входные данные Входной файл INPUT.TXT содержит единственное целое...

Является ли число степенью двойки
Дано натуральное число n. Определите, является ли оно степенью числа 2, и...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru