Comparación de ceros iniciales en representaciones binarias de dos números

Dados dos números enteros x e y. Compare e imprima cuál de ellos tiene más ceros a la izquierda usando la operación Bitwise. Si tanto el no. tener el mismo nro. de ceros iniciales, escriba «Igual».
Nota:- Un cero inicial es cualquier dígito 0 que viene antes del primer dígito distinto de cero en la notación binaria del número.
Ejemplos: 
 

Input : 10, 16
Output :10
Explanation: If we represent the no.s using 8 bit only then 
Binary(10) = 00001010
Binary(16) = 00010000
Clearly, 10 has 4 leading zeros and 16 has 3 leading zeros

Input : 10, 12
Output : Equal
Binary(10) = 00001010
Binary(12) = 00001100
Both have equal no. of leading zeros.

Solución 1 : el enfoque Naive es encontrar primero la representación binaria de los números y luego contar el no. de ceros iniciales.
Solución 2: encuentre la mayor potencia de dos más pequeña que los números dados y compare estas potencias de dos para decidir la respuesta.
Solución 3: un enfoque eficiente es utilizar operadores AND y XOR bit a bit.
 

Caso 1: Si ambos tienen el mismo no. de ceros a la izquierda entonces (x^y) <= (x & y) porque el mismo número de ceros a la izquierda causaría un 1 en una posición más alta en x & y.
Caso 2: si hacemos la negación de y y hacemos AND bit a bit con x, obtenemos un uno en una posición más alta que en y cuando y tiene más números de 0 iniciales.
Caso 3: Si no, x tiene más ceros a la izquierda

C++

// CPP program to find the number with more
// leading zeroes.
#include <bits/stdc++.h>
using namespace std;
 
// Function to compare the no. of leading zeros
void LeadingZeros(int x, int y)
{
    // if both have same no. of leading zeros
    if ((x ^ y) <= (x & y))
        cout << "\nEqual";
 
    // if y has more leading zeros
    else if ((x & (~y)) > y)
        cout << y;
 
    else
        cout << x;
}
 
// Main Function
int main()
{
    int x = 10, y = 16;
    LeadingZeros(x, y);
    return 0;
}

Java

// Java program to find the number
// with more leading zeroes.
class GFG
{
// Function to compare the no.
// of leading zeros
static void LeadingZeros(int x, int y)
{
    // if both have same no. of
    // leading zeros
    if ((x ^ y) <= (x & y))
        System.out.print("\nEqual");
 
    // if y has more leading zeros
    else if ((x & (~y)) > y)
        System.out.print(y);
 
    else
        System.out.print(x);
}
 
// Driver Code
public static void main (String[] args)
{
    int x = 10, y = 16;
    LeadingZeros(x, y);
}
}
 
// This code is contributed by Smitha

Python3

# Python 3 program to find the number
# with more leading zeroes.
 
# Function to compare the no. of
# leading zeros
def LeadingZeros(x, y):
     
    # if both have same no. of
    # leading zeros
    if ((x ^ y) <= (x & y)):
        print("Equal")
 
    # if y has more leading zeros
    elif ((x & (~y)) > y) :
        print(y)
 
    else:
        print(x)
 
# Driver Code
if __name__ == '__main__':
    x = 10
    y = 16
    LeadingZeros(x, y)
 
# This code is contributed
# by Surendra_Gangwar

C#

// C# program to find the number
// with more leading zeroes.
using System;
 
class GFG
{
// Function to compare the no.
// of leading zeros
static void LeadingZeros(int x, int y)
{
    // if both have same no. of
    // leading zeros
    if ((x ^ y) <= (x & y))
        Console.WriteLine("\nEqual");
 
    // if y has more leading zeros
    else if ((x & (~y)) > y)
        Console.WriteLine(y);
 
    else
        Console.WriteLine(x);
}
 
// Driver Code
static public void Main ()
{
    int x = 10, y = 16;
    LeadingZeros(x, y);
}
}
 
// This code is contributed by ajit

PHP

<?php
// PHP program to find the number
// with more leading zeroes.
 
// Function to compare the no.
// of leading zeros
function LeadingZeros($x, $y)
{
    // if both have same no. of
    // leading zeros
    if (($x ^ $y) <= ($x & $y))
        echo "\nEqual";
 
    // if y has more leading zeros
    else if (($x & (~$y)) > $y)
        echo $y;
 
    else
        echo $x;
}
 
// Driver Code
$x = 10;
$y = 16;
LeadingZeros($x, $y);
     
// This code is contributed by ajit
?>

Javascript

<script>
 
// Javascript program to find the number with more
// leading zeroes.
 
// Function to compare the no. of leading zeros
function LeadingZeros(x, y)
{
    // if both have same no. of leading zeros
    if ((x ^ y) <= (x & y))
        document.write("<br>Equal");
 
    // if y has more leading zeros
    else if ((x & (~y)) > y)
        document.write(y);
 
    else
        document.write(x);
}
 
// Main Function
    let x = 10, y = 16;
    LeadingZeros(x, y);
 
</script>
Producción: 

10

 

Complejidad de tiempo: O(1) 
Complejidad de espacio: O(1)
 

Publicación traducida automáticamente

Artículo escrito por Shubham__Ranjan 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 *