/* Given an integer, write a function to determine if it is a power of two. */
/*
Approach 1: Using right shift in O(n)
Approach 2: N(of the form 2^k) has only one 1 in msb and all 1's and (N - 1) has only one 0 in msb and all 1's so the and of the two will be 0 if N is a power of 2. O(1) solution
*/
/*
Approach 1: Using right shift in O(n)
Approach 2: N(of the form 2^k) has only one 1 in msb and all 1's and (N - 1) has only one 0 in msb and all 1's so the and of the two will be 0 if N is a power of 2. O(1) solution
*/
#include <iostream>
#include <cmath>
using namespace std;
bool isPowerofTwo(int N){
if(N < 1){
return false;
}
while(N > 1){
if((N & 1) == 1){
return false;
}
N = N >> 1;
}
return true;
}
bool isPowerEfficient(int N){
if(N < 0)
return false;
return N == 1 || !(N & (N - 1));
}
int main(){
int N = 1;
//bool isPower = isPowerofTwo(N);
bool isPower = isPowerEfficient(N);
if(isPower)
cout << "YES" << endl;
else
cout << "NO" << endl;
return 0;
}
0 comments:
Post a Comment