Equivalente decimal del código Gray y su inversa

Dado un número decimal n. Encuentra el código gris de este número en forma decimal.

Ejemplos: 

Entrada: 7 
Salida: 4 
Explicación: 7 se representa como 111 en forma binaria. El código gray equivalente 
al 111 es 100 en forma binaria, cuyo equivalente decimal es 4.

Entrada: 10 
Salida: 15 
Explicación: 10 se representa como 1010 en forma binaria. El código gris equivalente 
a 1010 es 1111 en forma binaria, cuyo equivalente decimal es 15. 

La siguiente tabla muestra la conversión de valores de código binario a valores de código gris: 

valor decimal Equivalente binario Equivalente de código gris Valor decimal del equivalente de código Gray
0 000 000 0
1 001 001 1
2 010 011 3
3 011 010 2
4 100 110 6
5 101 111 7
6 110 101 5
7 111 100 4

A continuación se muestra el enfoque para la conversión de valores de código decimal a valores de código gris.  
Sea G(n) el equivalente en código Gray de la representación binaria n. Considere bits de un número n y un bit de número G(n). Tenga en cuenta que los bits establecidos más a la izquierda de n y G(n) están en la misma posición. Sea esta posición i y las posiciones a la derecha sean (i+1), (i+2), etc. El (i+1) -ésimo bit en G(n) es 0 si (i+1)-ésimo bit en n es 1 y viceversa también es cierto. Lo mismo es cierto para (i+2)-th bits, etc. Así tenemos G (n) = n xor (n >> 1): 

C++

// CPP Program to convert given
// decimal number into decimal
// equivalent of its gray code form
#include <bits/stdc++.h>
using namespace std;
 
int grayCode(int n)
{
    /* Right Shift the number by 1
       taking xor with original number */
    return n ^ (n >> 1);
}
 
// Driver Code
int main()
{
    int n = 10;
    cout << grayCode(n) << endl;
    return 0;
}

Java

// Java Program to convert given
// decimal number into decimal
// equivalent of its gray code form
class GFG {
     
    static int grayCode(int n)
    {
         
        // Right Shift the number
        // by 1 taking xor with
        // original number
        return n ^ (n >> 1);
    }
 
    // Driver Code
    public static void main(String[] args)
    {
         
        int n = 10;
         
        System.out.println(grayCode(n));
    }
}
 
// This code is contributed by
// Smitha Dinesh Semwal

Python3

# Python 3 Program to convert
# given decimal number into
# decimal equivalent of its
# gray code form
 
def grayCode(n):
 
    # Right Shift the number
    # by 1 taking xor with
    # original number
    return n ^ (n >> 1)
 
 
# Driver Code
n = 10
print(grayCode(n))
 
# This code is contributed
# by Smitha Dinesh Semwal

C#

// C# Program to convert given
// decimal number into decimal
// equivalent of its gray code form
using System;
 
public class GFG {
     
    // Function for conversion
    public static int grayCode(int n)
    {
         
        // Right Shift the number
        // by 1 taking xor with
        // original number
        return n ^ (n >> 1);
    }
     
    // Driver Code
    static public void Main ()
    {
        int n = 10;
         
        Console.WriteLine(grayCode(n));
    }
}
 
// This code is contributed by Ajit.

PHP

<?php
// PHP Program to convert given
// decimal number into decimal
// equivalent of its gray code form
 
function grayCode($n)
{
    /* Right Shift the number by 1
       taking xor with original
       number */
    return $n ^ ($n >> 1);
}
 
    // Driver Code
    $n = 10;
    echo grayCode($n) ;
 
// This code is contributed by nitin mittal.
?>

Javascript

<script>
  
// Javascript Program to convert given
// decimal number into decimal
// equivalent of its gray code form
 
function grayCode(n)
{
    /* Right Shift the number by 1
       taking xor with original number */
    return n ^ (n >> 1);
}
 
// Driver Code
var n = 10;
document.write( grayCode(n) );
 
 
</script>
Producción: 

15

 

Tiempo Complejidad: O(1) 
Espacio Auxiliar: O(1)

Hallar el código Gray inverso 
Dado un número equivalente decimal n de un código Gray. Encuentra su número original en forma decimal.

Ejemplos: 

Entrada: 4 
Salida: 7

Entrada : 15 
Salida : 10

A continuación se muestra el enfoque para la conversión de valores de código gris a valores de código decimal.  
Iremos de los bits más antiguos a los más jóvenes (incluso el bit más pequeño tiene el número 1, y el bit más antiguo tiene el número k). Obtenemos tales relaciones entre los bits del n i número n y los bits del g i número g:  

 nk = gk, 
 nk-1 = gk-1 xor nk = gk xor gk-1
 nk-2 = gk-2 xor nk-1 = gk xor gk-1 xor gk-2 
 nk-3 = gk-3 xor nk-2 = gk xor gk-1 xor gk-2 xor gk-3
 ... 

C++

// CPP Program to convert given
// decimal number of gray code
// into its inverse in decimal form
#include <bits/stdc++.h>
using namespace std;
 
int inversegrayCode(int n)
{
    int inv = 0;
 
    // Taking xor until n becomes zero
    for (; n; n = n >> 1)
        inv ^= n;
 
    return inv;
}
 
// Driver Code
int main()
{
    int n = 15;
    cout << inversegrayCode(n) << endl;
    return 0;
}

Java

// Java Program to convert given
// decimal number of gray code
// into its inverse in decimal form
import java.io.*;
 
class GFG {
     
    // Function to convert given
    // decimal number of gray code
    // into its inverse in decimal form
    static int inversegrayCode(int n)
    {
        int inv = 0;
     
        // Taking xor until n becomes zero
        for ( ; n != 0 ; n = n >> 1)
            inv ^= n;
     
        return inv;
    }
     
    // Driver code
    public static void main (String[] args)
    {
        int n = 15;
        System.out.println(inversegrayCode(n));
    }
}
 
// This code is contributed by Ajit.

Python3

# Python3 Program to convert
# given decimal number of
# gray code into its inverse
# in decimal form
 
def inversegrayCode(n):
    inv = 0;
     
    # Taking xor until
    # n becomes zero
    while(n):
        inv = inv ^ n;
        n = n >> 1;
    return inv;
 
# Driver Code
n = 15;
print(inversegrayCode(n));
 
# This code is contributed
# by mits

C#

// C# Program to convert given
// decimal number of gray code
// into its inverse in decimal form
using System;
 
class GFG {
     
    // Function to convert given
    // decimal number of gray code
    // into its inverse in decimal form
    static int inversegrayCode(int n)
    {
        int inv = 0;
     
        // Taking xor until n becomes zero
        for ( ; n != 0 ; n = n >> 1)
            inv ^= n;
     
        return inv;
    }
     
    // Driver code
    public static void Main ()
    {
        int n = 15;
        Console.Write(inversegrayCode(n));
    }
}
 
// This code is contributed by nitin mittal.

PHP

<?php
// PHP Program to convert given
// decimal number of gray code
// into its inverse in decimal form
 
function inversegrayCode( $n)
{
    $inv = 0;
 
    // Taking xor until
    // n becomes zero
    for (; $n; $n = $n >> 1)
        $inv ^= $n;
 
    return $inv;
}
 
    // Driver Code
    $n = 15;
    echo inversegrayCode($n);
 
// This code is contributed by anuj_67.
?>

Javascript

<script>
 
// JavaScript Program to convert given
// decimal number of gray code
// into its inverse in decimal form
 
function inversegrayCode(n)
{
    let inv = 0;
 
    // Taking xor until n becomes zero
    for (; n; n = n >> 1)
        inv ^= n;
 
    return inv;
}
 
// Driver Code
    let n = 15;
    document.write(inversegrayCode(n));
     
</script>
Producción: 

10

 

Complejidad temporal: O(log n) 
Espacio auxiliar: O(1)

Sugiera si alguien tiene una mejor solución que sea más eficiente en términos de espacio y tiempo.
Este artículo es una contribución de Aarti_Rathi. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

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