Преобразование двоичного числа в восьмеричное с использованием HashMap в Java

Опубликовано: 4 Сентября, 2022

Помните, что когда мы преобразовывали восьмеричное число в десятичное, мы одновременно принимали 3 двоичных разряда. Будет использоваться аналогичный подход, где здесь для каждых 3 цифр у нас есть соответствующее число, поскольку в восьмеричной системе у нас есть числа от 0 до «R-1», где R представляет собой базовое значение системы счисления. Как следует из названия, в восьмеричной системе счисления R эквивалентен 8. Следовательно, число выглядит следующим образом: 0,1,2,3,4,5,6,7.

Теперь, благодаря преобразованию HashMaps, отсюда ясно, что тот или иной двоичный эквивалент и восьмеричный эквивалент будут действовать как пары ключ-значение в нашем HashMap.

Иллюстрация:

восьмеричный Бинарный
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111

Алгоритм:

  1. Преобразуйте двоичное число в десятичное число.
  2. Используя HashMap, мы сопоставляем каждый бит с его десятичными значениями.
  3. Когда бит найден, он отображается с десятичным числом
  4. Печатает и отображает восьмеричный эквивалент числа.

Пример:

Input  1 : 1011
Output 1 :   13

Input  2 : 1000
Output 2 :   10

Реализация:

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 : ");
    }
}

Выход:

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

Временная сложность: O(N)

Вспомогательное пространство: O(N)