Рубрики

C ++ Программа для определения, является ли нет степенью двойки

Получив положительное целое число, напишите функцию, чтобы определить, является ли она степенью двойки или нет.

Примеры :

Input : n = 4
Output : Yes
22 = 4

Input : n = 7
Output : No

Input : n = 32
Output : Yes
25 = 32

1. Простой метод для этого — просто взять журнал числа на основе 2, и если вы получите целое число, то число будет степенью 2.

C ++

// C ++ Программа для поиска
// нет - сила двух
#include <bits/stdc++.h>

using namespace std;

  
// Функция для проверки, является ли x степенью 2

bool isPowerOfTwo(int n)

{

    return (ceil(log2(n)) == floor(log2(n)));

}

  
// Драйвер программы

int main()

{

    isPowerOfTwo(31) ? cout << "Yes" << endl : cout << "No" << endl;

    isPowerOfTwo(64) ? cout << "Yes" << endl : cout << "No" << endl;

  

    return 0;

}

  
// Этот код предоставлен Surendra_Gangwar

Выход:

No
Yes

2. Другое решение состоит в том, чтобы продолжать делить число на два, т.е. делать n = n / 2 итеративно. На любой итерации, если n% 2 становится ненулевым и n не равно 1, то n не является степенью 2. Если n становится 1, то это степень 2.

3. Все степени двух чисел имеют только один установленный бит. Так что считай нет. из установленных битов, и если вы получаете 1, то число является степенью 2. Пожалуйста, смотрите Количество установленных бит в целом числе для подсчета установленных бит.

4. Если мы вычтем степень 2 чисел на 1, тогда все неустановленные биты после единственного установленного бита станут установленными; и установленный бит становится неустановленным.

Например, для 4 (100) и 16 (10000) мы получим следующее после вычитания 1
3 -> 011
15 -> 01111

Таким образом, если число n является степенью 2, то поразрядно & n и n-1 будут равны нулю. Мы можем сказать, что n является степенью 2 или не основано на значении n & (n-1). Выражение n & (n-1) не будет работать, когда n равно 0. Для обработки этого случая наше выражение также станет n & (! N & (n-1)) (благодаря http://espressocode.top/program-to -find-ли-нет-не-сила-два / Мохаммед за добавление этого случая).

Пожалуйста, обратитесь к полной статье о Программе, чтобы узнать, является ли «нет» степенью двух, для более подробной информации!

Рекомендуемые посты:

C ++ Программа для определения, является ли нет степенью двойки

0.00 (0%) 0 votes