Conversión de número binario a octal usando HashMap en Java

Recuerde que mientras convertíamos octal a decimal tomamos 3 dígitos binarios a la vez. Se utilizará un enfoque similar donde aquí por cada 3 dígitos tenemos un número correspondiente como en el sistema octal tenemos números de 0 a ‘R-1’ donde R representa el valor base del sistema numérico. Como sugiere el nombre, en un sistema numérico octal, R es equivalente a 8. Por lo tanto, el número es el siguiente: 0,1,2,3,4,5,6,7. 

Ahora, en virtud de HashMaps en la conversión de algo, está claro desde aquí que ese equivalente binario y el equivalente octal actuarán como pares clave-valor en nuestro HashMap.

Ilustración:

octales Binario
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111

Algoritmo:

  1. Convierte el número binario en un número decimal.
  2. Usando HashMap mapeamos cada bit con sus valores decimales.
  3. Cuando se encuentra el bit, se asigna con el número decimal
  4. Imprime y muestra el equivalente octal del número.

Ejemplo:

Input  1 : 1011
Output 1 :   13

Input  2 : 1000
Output 2 :   10

Implementación:

Java

// Java Program to Convert Binary Number to Octal Number
 
// Importing all utility classes
import java.util.*;
 
// Main class
pubic class GFG {
 
    // Method 1
    // Helper method
    public static void octal(String s)
    {
 
        // Here binary number is represented by string 's'
        // over which standard length() method is computed
        // to get the length of binary number
 
        // Appending 2 zeros if binary numbers leaves
        // remainder as 1 after dividing with 3
        if (s.length() % 3 == 1) {
 
            // Append  two zeros to it
            s = "00" + s;
        }
 
        // If binary string number length after equals 2
        else if (s.length() % 3 == 2) {
 
            // Concatenate string by adding 1 zero to it
            s = "0" + s;
        }
 
        // Creating an object of HashMap
        // Declaring object of String and Integer types
        HashMap<String, Integer> hm = new HashMap<>();
 
        // Adding elements to the object created above
        // using the put() method
 
        // Adding elements(key-value) pairs to given object
        // 000 in binary system  ->  0 in octal system
        // 001 in binary system  ->  1 in octal system
 
        // Similarly adding for 0 to N-1 (N=8 for octal)
        hm.put("000", 0);
        hm.put("001", 1);
        hm.put("010", 2);
        hm.put("011", 3);
        hm.put("100", 4);
        hm.put("101", 5);
        hm.put("110", 6);
        hm.put("111", 7);
 
        // Creating and declaring a string array
        String[] part = new String[3];
        int t = 0;
 
        // Iterating over the binary number digits
        for (int i = 0; i < s.length(); i = i + 3) {
 
            // Checking for substring in an binary number
            // digit array
            String bypart = s.substring(i, i + 3);
            part[t] = bypart;
 
            // If found
            if (hm.containsKey(part[t])) {
 
                // Getting the part to be matched for
                // its corresponding octal numbers
                System.out.print(hm.get(part[t]));
            }
 
            // Incrementing the counter
            t++;
        }
    }
 
    // Method 2
    // Main driver method
    public static void main(String[] args)
    {
 
        // Display message
        System.out.print("Enter the binary number to be converted : ");
        // Binary number to be converted
        // Custom entry 
        String s = 011;
         
        // Calling the method1 octal() over the
        // above input entered number
        octal(s);
       
        // Display message
        System.out.print("Octal equivalent : ");
    }
}

Producción: 

Enter the binary number to be converted : 011
Octal equivalent : 3

Complejidad de tiempo: O(N)

Espacio Auxiliar: O(N)
 

Publicación traducida automáticamente

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