diff --git a/math/power_of_two.cpp b/math/power_of_two.cpp new file mode 100644 index 000000000..1e904dbe7 --- /dev/null +++ b/math/power_of_two.cpp @@ -0,0 +1,58 @@ + +/** + * @file power_of_two.cpp + * @brief Implementation to check whether a number is a power of 2 or not. + * + * @details + * This algorithm uses bit manipulation to check if a number is a power of 2 or not. + * + * ### Algorithm + * Let the input number be n, then the bitwise and between n and n-1 will let us know + * whether the number is power of 2 or not + * + * For Example, + * If N= 32 then N-1 is 31, if we perform bitwise and of these two numbers then + * the result will be zero, which indicates that it is the power of 2 + * If N=23 then N-1 is 22, if we perform bitwise and of these two numbers then + * the result will not be zero , which indicates that it is not the power of 2 + * \note This implementation is better than naive recursive or iterative approach. + * + * @author [Neha Hasija](https://github.com/neha-hasija17) + */ + +#include +/** + * Function to test above algorithm + */ +void power_of_two(int n){ + /** + * This function finds whether a number is power of 2 or not + * @param n value for which we want to check + * prints the result, as "Yes, the number n is a power of 2" or + * "No, the number is not a power of 2" without quotes + */ + /// result stores the + /// bitwise and of n and n-1 + int result = n & (n-1); + if(result==0) + + std::cout<<"Yes, the number "<>n; + ///function call with @param n + power_of_two(n); + return 0; +}