Requisito previo: función Bitset en la biblioteca STL
Dado un número N , la tarea es encontrar la diferencia absoluta del número de bits activados y desactivados de este número dado.
Ejemplos:
Entrada: N = 14
Salida: 2
Explicación:
La representación binaria de 14 es “1110”.
Aquí, el número de bits activados es 3 y el número de bits no activados es 1.
Por lo tanto, la diferencia absoluta es 2.Entrada: N = 56
Salida: 0
Explicación: La
representación binaria de 56 es “110100”.
Aquí el número de bits activados es 3 y el número de bits no activados es 3.
Por lo tanto, la diferencia absoluta es 0.
Acercarse:
- Cuente el número total de bits en la representación binaria del número dado.
- Use la función de conjunto de bits definida en la biblioteca STL para contar la cantidad de bits establecidos de manera eficiente.
- Luego, restaremos los bits establecidos del número total de bits para obtener el número de bits no establecidos.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; // Max size of bitset const int sz = 64; // Function to return the total bits // in the binary representation // of a number int totalbits(int N) { return (int)(1 + log2(N)); } // Function to calculate the // absolute difference int absoluteDifference(int N) { bitset<sz> arr(N); int total_bits = totalbits(N); // Calculate the number of // set bits int set_bits = arr.count(); // Calculate the number of // unset bits int unset_bits = total_bits - set_bits; int ans = abs(set_bits - unset_bits); // Return the absolute difference return ans; } // Driver Code int main() { // Given Number int N = 14; // Function Call cout << absoluteDifference(N); return 0; }
Java
// Java program for the above approach import java.util.*; class GFG{ // Max size of bitset static final int sz = 64; // Function to return the total bits // in the binary representation // of a number static int totalbits(int N) { return (1 + (int)(Math.log(N) / Math.log(2))); } // Function to calculate the // absolute difference static int absoluteDifference(int N) { int arr = N; int total_bits = totalbits(N); // Calculate the number of // set bits int set_bits = countSetBits(arr); // Calculate the number of // unset bits int unset_bits = total_bits - set_bits; int ans = Math.abs(set_bits - unset_bits); // Return the absolute difference return ans; } static int countSetBits(int n) { int count = 0; while (n > 0) { n &= (n - 1); count++; } return count; } // Driver code public static void main(String[] args) { // Given Number int N = 14; // Function Call System.out.println(absoluteDifference(N)); } } // This code is contributed by offbeat
Python3
# Python3 program for the above approach import math # Max size of bitset sz = 64 # Function to return the total bits # in the binary representation # of a number def totalbits(N) : return (1 + (int)(math.log(N) / math.log(2))) # Function to calculate the # absolute difference def absoluteDifference(N) : arr = N total_bits = totalbits(N) # Calculate the number of # set bits set_bits = countSetBits(arr) # Calculate the number of # unset bits unset_bits = total_bits - set_bits ans = abs(set_bits - unset_bits) # Return the absolute difference return ans def countSetBits(n) : count = 0 while (n > 0) : n = n & (n - 1) count += 1 return count # Given Number N = 14 # Function Call print(absoluteDifference(N)) # This code is contributed by divyesh072019
C#
// C# program for the above approach using System; class GFG{ // Function to return the total bits // in the binary representation // of a number static int totalbits(int N) { return (1 + (int)(Math.Log(N) / Math.Log(2))); } // Function to calculate the // absolute difference static int absoluteDifference(int N) { int arr = N; int total_bits = totalbits(N); // Calculate the number of // set bits int set_bits = countSetBits(arr); // Calculate the number of // unset bits int unset_bits = total_bits - set_bits; int ans = Math.Abs(set_bits - unset_bits); // Return the absolute difference return ans; } static int countSetBits(int n) { int count = 0; while (n > 0) { n &= (n - 1); count++; } return count; } // Driver code static void Main() { // Given Number int N = 14; // Function Call Console.WriteLine(absoluteDifference(N)); } } // This code is contributed by divyeshrabadiya07
Javascript
<script> // Javascript program for the above approach // Function to return the total bits // in the binary representation // of a number function totalbits(N) { return (1 + parseInt(Math.log(N) / Math.log(2), 10)); } // Function to calculate the // absolute difference function absoluteDifference(N) { let arr = N; let total_bits = totalbits(N); // Calculate the number of // set bits let set_bits = countSetBits(arr); // Calculate the number of // unset bits let unset_bits = total_bits - set_bits; let ans = Math.abs(set_bits - unset_bits); // Return the absolute difference return ans; } function countSetBits(n) { let count = 0; while (n > 0) { n &= (n - 1); count++; } return count; } // Given Number let N = 14; // Function Call document.write(absoluteDifference(N)); </script>
2
Complejidad de tiempo: O (log N)
Publicación traducida automáticamente
Artículo escrito por shauryarehangfg y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA