diff --git a/DIRECTORY.md b/DIRECTORY.md index 964b49aeb..b65d77995 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -10,6 +10,7 @@ * [Sudoku Solve](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/backtracking/sudoku_solve.cpp) ## Bit Manipulation + * [Count Of Set Bits](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/bit_manipulation/count_of_set_bits.cpp) * [Hamming Distance](https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/bit_manipulation/hamming_distance.cpp) ## Ciphers diff --git a/bit_manipulation/count_of_set_bits.cpp b/bit_manipulation/count_of_set_bits.cpp new file mode 100644 index 000000000..87f01d161 --- /dev/null +++ b/bit_manipulation/count_of_set_bits.cpp @@ -0,0 +1,80 @@ +/** + * @file + * @brief Implementation to [count sets + * bits](https://www.geeksforgeeks.org/count-set-bits-in-an-integer/) in an + * integer. + * + * @details + * We are given an integer number. Let’s say, number. The task is to first + * calculate the binary digit of a number and then calculate the total set bits + * of a number. + * + * Set bits in a binary number is represented by 1. Whenever we calculate the + * binary number of an integer value it is formed as the combination of 0’s and + * 1’s. So digit 1 is known as a set bit in computer terms. + * Time Complexity: O(log n) + * Space complexity: O(1) + * @author [Swastika Gupta](https://github.com/Swastyy) + */ + +#include /// for assert +#include /// for io operations +#include /// for std::vector + +/** + * @namespace bit_manipulation + * @brief Bit manipulation algorithms + */ +namespace bit_manipulation { +/** + * @namespace count_of_set_bits + * @brief Functions for the [count sets + * bits](https://www.geeksforgeeks.org/count-set-bits-in-an-integer/) + * implementation + */ +namespace count_of_set_bits { +/** + * @brief The main function implements set bit count + * @param n is the number whose set bit will be counted + * @returns the count of the number set bit in the binary representation of `n` + */ +std::uint64_t countSetBits(int n) { + int count = 0; // "count" variable is used to count number of 1's in binary + // representation of the number + while (n != 0) { + count += n & 1; + n = n >> 1; // n=n/2 + } + return count; +} +} // namespace count_of_set_bits +} // namespace bit_manipulation + +/** + * @brief Self-test implementations + * @returns void + */ +static void test() { + // n = 4 return 1 + assert(bit_manipulation::count_of_set_bits::countSetBits(4) == 1); + // n = 6 return 2 + assert(bit_manipulation::count_of_set_bits::countSetBits(6) == 2); + // n = 13 return 3 + assert(bit_manipulation::count_of_set_bits::countSetBits(13) == 3); + // n = 9 return 2 + assert(bit_manipulation::count_of_set_bits::countSetBits(9) == 2); + // n = 15 return 4 + assert(bit_manipulation::count_of_set_bits::countSetBits(15) == 4); + // n = 25 return 3 + assert(bit_manipulation::count_of_set_bits::countSetBits(25) == 3); + std::cout << "All test cases successfully passed!" << std::endl; +} + +/** + * @brief Main function + * @returns 0 on exit + */ +int main() { + test(); // run self-test implementations + return 0; +}