mirror of
https://hub.njuu.cf/TheAlgorithms/C-Plus-Plus.git
synced 2023-10-11 13:05:55 +08:00
Create power_of_two.cpp (#1315)
* Create power_of_two.cpp This Pull Request is for HacktoberFest 2020 * Update math/power_of_two.cpp Co-authored-by: David Leal <halfpacho@gmail.com> * Update math/power_of_two.cpp Co-authored-by: David Leal <halfpacho@gmail.com> * Update math/power_of_two.cpp Co-authored-by: David Leal <halfpacho@gmail.com> * Update math/power_of_two.cpp Co-authored-by: David Leal <halfpacho@gmail.com> * Update math/power_of_two.cpp Co-authored-by: David Leal <halfpacho@gmail.com> * Update math/power_of_two.cpp Co-authored-by: David Leal <halfpacho@gmail.com> * updating DIRECTORY.md * clang-format and clang-tidy fixes for3d017c44
* Update math/power_of_two.cpp Co-authored-by: David Leal <halfpacho@gmail.com> * Update math/power_of_two.cpp Co-authored-by: David Leal <halfpacho@gmail.com> * Update math/power_of_two.cpp Co-authored-by: David Leal <halfpacho@gmail.com> * clang-format and clang-tidy fixes forf76c1009
Co-authored-by: David Leal <halfpacho@gmail.com> Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com>
This commit is contained in:
parent
521aa3f8cf
commit
9438ea11a2
@ -164,6 +164,7 @@
|
||||
* [Ncr Modulo P](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/math/ncr_modulo_p.cpp)
|
||||
* [Number Of Positive Divisors](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/math/number_of_positive_divisors.cpp)
|
||||
* [Power For Huge Numbers](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/math/power_for_huge_numbers.cpp)
|
||||
* [Power Of Two](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/math/power_of_two.cpp)
|
||||
* [Prime Factorization](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/math/prime_factorization.cpp)
|
||||
* [Prime Numbers](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/math/prime_numbers.cpp)
|
||||
* [Primes Up To Billion](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/math/primes_up_to_billion.cpp)
|
||||
|
66
math/power_of_two.cpp
Normal file
66
math/power_of_two.cpp
Normal file
@ -0,0 +1,66 @@
|
||||
/**
|
||||
* @file
|
||||
* @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 <iostream> /// for std::cout
|
||||
|
||||
/**
|
||||
* @namespace math
|
||||
* @brief Mathematical algorithms
|
||||
*/
|
||||
namespace math {
|
||||
/**
|
||||
* @brief Function to test above algorithm
|
||||
* @param n description
|
||||
* @returns void
|
||||
*/
|
||||
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 << " is a power of 2";
|
||||
} else {
|
||||
std::cout << "No, the number " << n << " is not a power of 2";
|
||||
}
|
||||
}
|
||||
} // namespace math
|
||||
|
||||
/**
|
||||
* @brief Main function
|
||||
* @returns 0 on exit
|
||||
*/
|
||||
int main() {
|
||||
int n = 0;
|
||||
/// n stores the input from the user
|
||||
std::cout << "enter a number " << std::endl;
|
||||
std::cin >> n;
|
||||
/// function call with @param n
|
||||
math::power_of_two(n);
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user