Преобразование двоичного числа в восьмеричное с использованием HashMap в Java
Помните, что когда мы преобразовывали восьмеричное число в десятичное, мы одновременно принимали 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 |
Алгоритм:
- Преобразуйте двоичное число в десятичное число.
- Используя HashMap, мы сопоставляем каждый бит с его десятичными значениями.
- Когда бит найден, он отображается с десятичным числом
- Печатает и отображает восьмеричный эквивалент числа.
Пример:
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)