Cuente los ceros finales presentes en la representación binaria de un número dado usando XOR

Dado un número entero N , la tarea es encontrar el número de ceros finales en la representación binaria del número dado.

Ejemplos:

Entrada: N = 12
Salida: 2
Explicación:
La representación binaria del número 13 es “1100”.
Por lo tanto, hay dos ceros finales en el 12.

Entrada: N = -56
Salida: 3
Explicación:
La representación binaria del número -56 es “001000”.
Por lo tanto, hay 3 ceros finales presentes en -56.

Enfoque: Siga los pasos para resolver el problema

  • La idea es usar la observación de que después de calcular XOR de N con N – 1 , todo el bit establecido de N se fue hacia el bit establecido más a la derecha, es decir, el bit establecido LSB desaparece y el bit establecido más a la derecha de N se convierte en el bit establecido más a la izquierda de N. ^ (N-1) .
  • Imprime el conteo de bits de un número (N ^ (N – 1)) decrementado en 1 .

A continuación se muestra la implementación del enfoque anterior:

C++

// C++ implementation
// of the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to print count of
// trailing zeroes present in
// binary representation of N
int countTrailingZeroes(int N)
{
    // Count set bits in (N ^ (N - 1))
    int res = log2(N ^ (N - 1));
 
    // If res < 0, return 0
    return res >= 0 ? res : 0;
}
 
// Driver Code
int main()
{
    int N = 12;
 
    // Function call to print the count
    // of trailing zeroes in the binary
    // representation of N
    cout << countTrailingZeroes(N);
 
    return 0;
}

Java

// Java implementation
// of the above approach
import java.io.*;
 
class GFG {
 
    // Function to print count of
    // trailing zeroes present in
    // binary representation of N
    public static int countTrailingZeroes(int N)
    {
        // Stores XOR of N and (N-1)
        int res = N ^ (N - 1);
 
        // Return count of set bits in res
        return (int)(Math.log(temp)
                     / Math.log(2));
    }
 
    // Driver Code
    public static void main(String[] args)
    {
        int N = 12;
 
        // Function call to print the count
        // of trailing zeroes in the binary
        // representation of N
        System.out.println(
            countTrailingZeroes(N));
    }
}

Python3

# Python3 implementation
# of the above approach
from math import log2
 
# Function to print count of
# trailing zeroes present in
# binary representation of N
def countTrailingZeroes(N):
   
    # Count set bits in (N ^ (N - 1))
    res = int(log2(N ^ (N - 1)))
 
    # If res < 0, return 0
    return res if res >= 0 else 0
 
# Driver Code
if __name__ == '__main__':
    N = 12
 
    # Function call to print the count
    # of trailing zeroes in the binary
    # representation of N
    print (countTrailingZeroes(N))
 
    # This code is contributed by mohit kumar 29.

C#

// C# implementation
// of the above approach
using System;
public class GFG{
 
  // Function to print count of
  // trailing zeroes present in
  // binary representation of N
  public static int countTrailingZeroes(int N)
  {
    // Stores XOR of N and (N-1)
    int res = (int)Math.Log(N ^ (N - 1), 2.0);
 
    // Return count of set bits in res
    if(res >= 0)
      return res;
    else
      return 0;
  }
 
  // Driver Code
  static public void Main ()
  {
 
    int N = 12;
 
    // Function call to print the count
    // of trailing zeroes in the binary
    // representation of N
    Console.WriteLine(
      countTrailingZeroes(N));
  }
}
 
// This code is contributed by Dharanendra L V.

Javascript

<script>
 
// Javascript implementation
// of the above approach
 
// Function to print count of
// trailing zeroes present in
// binary representation of N
function countTrailingZeroes(N)
{
     
    // Count set bits in (N ^ (N - 1))
    let res = parseInt(Math.log(N ^ (N - 1)) /
                       Math.log(2));
 
    // If res < 0, return 0
    return res >= 0 ? res : 0;
}
 
// Driver Code
let N = 12;
 
// Function call to print the count
// of trailing zeroes in the binary
// representation of N
document.write(countTrailingZeroes(N));
 
// This code is contributed by souravmahato348 
  
</script>
Producción: 

2

 

Complejidad de tiempo: O(log(N))
Espacio auxiliar: O(1) 

Publicación traducida automáticamente

Artículo escrito por omkarphansopkar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *