# Decimal to octal conversion with minimum use of arithmetic operators

• Last Updated : 20 May, 2021

Given a decimal number n without floating-point. The problem is to convert the decimal number to octal number with minimum use of arithmetic operators.

Examples:

```Input : n = 10
Output : 12
12 is octal equivalent of decimal 10.

Input : n = 151
Output : 227```

Approach: Following are the steps:

1. Perform decimal to binary conversion without using arithmetic operators of the given number n. Refer this post. Let this number be bin.
2. Convert the binary number bin to octal. Refer this post.

## C++

 `// C++ implementation of decimal to octal conversion``// with minimum use of arithmetic operators``#include ` `using` `namespace` `std;` `// function for decimal to binary conversion``// without using arithmetic operators``string decToBin(``int` `n)``{``    ``if` `(n == 0)``        ``return` `"0"``;``     ` `    ``// to store the binary equivalent of decimal``    ``string bin = ``""``;   ``    ``while` `(n > 0)   ``    ``{``        ``// to get the last binary digit of the``        ``// number 'n' and accumulate it at the``        ``// beginning of 'bin'``        ``bin = ((n & 1) == 0 ? ``'0'` `: ``'1'``) + bin;``         ` `        ``// right shift 'n' by 1``        ``n >>= 1;``    ``}``     ` `    ``// required binary number``    ``return` `bin;``}` ` ` `// Function to find octal equivalent of binary``string convertBinToOct(string bin)``{``    ``int` `l = bin.size();``         ` `    ``// add min 0's in the beginning to make``    ``// string length divisible by 3``    ``for` `(``int` `i = 1; i <= (3 - l % 3) % 3; i++)``        ``bin = ``'0'` `+ bin;``      ` `    ``// create map between binary and its``    ``// equivalent octal code``    ``unordered_map bin_oct_map;``    ``bin_oct_map[``"000"``] = ``'0'``;``    ``bin_oct_map[``"001"``] = ``'1'``;``    ``bin_oct_map[``"010"``] = ``'2'``;``    ``bin_oct_map[``"011"``] = ``'3'``;``    ``bin_oct_map[``"100"``] = ``'4'``;``    ``bin_oct_map[``"101"``] = ``'5'``;``    ``bin_oct_map[``"110"``] = ``'6'``;``    ``bin_oct_map[``"111"``] = ``'7'``; ``      ` `    ``int` `i = 0;``    ``string octal = ``""``;     ``    ``while` `(1)``    ``{``        ``// one by one extract from left, substring``        ``// of size 3 and add its octal code``        ``octal += bin_oct_map[bin.substr(i, 3)];``        ``i += 3;``        ``if` `(i == bin.size())``            ``break``;       ``    ``}``      ` `    ``// required octal number``    ``return` `octal;   ``}` `// function to find octal equivalent of decimal``string decToOctal(``int` `n)``{``    ``// convert decimal to binary``    ``string bin = decToBin(n);``    ` `    ``// convert binary to octal``    ``// required octal equivalent of decimal``    ``return` `convertBinToOct(bin);``}` `// Driver program to test above``int` `main()``{``    ``int` `n = 151;``    ``cout << decToOctal(n);``    ``return` `0;``}`

## Java

 `// Java implementation of decimal to octal``// conversion with minimum use of``// arithmetic operators``import` `java.util.*;` `class` `GFG``{` `// function for decimal to binary conversion``// without using arithmetic operators``static` `String decToBin(``int` `n)``{``    ``if` `(n == ``0``)``        ``return` `"0"``;``    ` `    ``// to store the binary equivalent of decimal``    ``String bin = ``""``;``    ``while` `(n > ``0``)``    ``{``        ``// to get the last binary digit of the``        ``// number 'n' and accumulate it at the``        ``// beginning of 'bin'``        ``bin = ((n & ``1``) == ``0` `? ``'0'` `: ``'1'``) + bin;``        ` `        ``// right shift 'n' by 1``        ``n >>= ``1``;``    ``}``    ` `    ``// required binary number``    ``return` `bin;``}` `// Function to find octal equivalent of binary``static` `String convertBinToOct(String bin)``{``    ``int` `l = bin.length();``        ` `    ``// add min 0's in the beginning to make``    ``// string length divisible by 3``    ``for` `(``int` `i = ``1``; i <= (``3` `- l % ``3``) % ``3``; i++)``        ``bin = ``'0'` `+ bin;``        ` `    ``// create map between binary and its``    ``// equivalent octal code``    ``Map bin_oct_map = ``new` `HashMap<>();``    ``bin_oct_map.put(``"000"``, ``'0'``);``    ``bin_oct_map.put(``"001"``, ``'1'``);``    ``bin_oct_map.put(``"010"``, ``'2'``);``    ``bin_oct_map.put(``"011"``, ``'3'``);``    ``bin_oct_map.put(``"100"``, ``'4'``);``    ``bin_oct_map.put(``"101"``, ``'5'``);``    ``bin_oct_map.put(``"110"``, ``'6'``);``    ``bin_oct_map.put(``"111"``, ``'7'``);``        ` `    ``int` `i = ``0``;``    ``String octal = ``""``;    ``    ``while` `(``true``)``    ``{``        ``// one by one extract from left, substring``        ``// of size 3 and add its octal code``        ``octal += bin_oct_map.get(bin.substring(i, i + ``3``));``        ``i += ``3``;``        ``if` `(i == bin.length())``            ``break``;    ``    ``}``        ` `    ``// required octal number``    ``return` `octal;``}` `// function to find octal equivalent of decimal``static` `String decToOctal(``int` `n)``{``    ``// convert decimal to binary``    ``String bin = decToBin(n);``    ` `    ``// convert binary to octal``    ``// required octal equivalent of decimal``    ``return` `convertBinToOct(bin);``}` `// Driver Code``public` `static` `void` `main(String[] args)``{``    ``int` `n = ``151``;``    ``System.out.println(decToOctal(n));``}``}` `// This code is contributed by Rajput-Ji`

## Python3

 `# Python3 implementation of decimal to octal conversion``# with minimum use of arithmetic operators` `# function for decimal to binary conversion``# without using arithmetic operators``def` `decToBin(n):` `    ``if` `(n ``=``=` `0``):``        ``return` `"0"` `    ``# to store the binary equivalent of decimal``    ``bin` `=` `""``    ` `    ``while` `(n > ``0``):``    ` `        ``# to get the last binary digit of the``        ``# number 'n' and accumulate it at the``        ``# beginning of 'bin'``        ``bin` `=` `(``'0'` `if``(n & ``1``) ``=``=` `0` `else` `'1'``) ``+` `bin` `        ``# right shift 'n' by 1``        ``n >>``=` `1` `    ``# required binary number``    ``return` `bin` `# Function to find octal equivalent of binary``def` `convertBinToOct(``bin``):` `    ``l ``=` `len``(``bin``)` `    ``# add min 0's in the beginning to make``    ``# string length divisible by 3``    ``for` `i ``in` `range``(``1``,((``3` `-` `l ``%` `3``) ``%` `3``) ``+` `1``):``        ``bin` `=` `'0'` `+` `bin` `    ``# create map between binary and its``    ``# equivalent octal code``    ` `    ``bin_oct_map ``=` `dict``()``    ` `    ``bin_oct_map[``"000"``] ``=` `'0'``    ``bin_oct_map[``"001"``] ``=` `'1'``    ``bin_oct_map[``"010"``] ``=` `'2'``    ``bin_oct_map[``"011"``] ``=` `'3'``    ``bin_oct_map[``"100"``] ``=` `'4'``    ``bin_oct_map[``"101"``] ``=` `'5'``    ``bin_oct_map[``"110"``] ``=` `'6'``    ``bin_oct_map[``"111"``] ``=` `'7'` `    ``i ``=` `0``    ``octal ``=` `""``    ` `    ``while` `(``True``):``    ` `        ``# one by one extract from left, substring``        ``# of size 3 and add its octal code``        ``octal ``+``=` `bin_oct_map[``bin``[i:i ``+` `3``]]``        ``i ``+``=` `3``        ``if` `(i ``=``=` `len``(``bin``)):``            ``break``    ` `    ``# required octal number``    ``return` `octal` `# function to find octal equivalent of decimal``def` `decToOctal(n):` `    ``# convert decimal to binary``    ``bin` `=` `decToBin(n)` `    ``# convert binary to octal``    ``# required octal equivalent of decimal``    ``return` `convertBinToOct(``bin``)` `# Driver program to test above``if` `__name__``=``=``'__main__'``:` `    ``n ``=` `151``    ``print``(decToOctal(n))``    ` `# This code is contributed by pratham76`

## C#

 `// C# implementation of decimal to octal``// conversion with minimum use of``// arithmetic operators``using` `System;``using` `System.Collections.Generic;` `class` `GFG{`` ` `// Function for decimal to binary``// conversion without using``// arithmetic operators``static` `string` `decToBin(``int` `n)``{``    ``if` `(n == 0)``        ``return` `"0"``;``     ` `    ``// To store the binary equivalent``    ``// of decimal``    ``string` `bin = ``""``;``    ``while` `(n > 0)``    ``{``        ` `        ``// To get the last binary digit of the``        ``// number 'n' and accumulate it at the``        ``// beginning of 'bin'``        ``bin = ((n & 1) == 0 ? ``'0'` `: ``'1'``) + bin;``         ` `        ``// Right shift 'n' by 1``        ``n >>= 1;``    ``}``    ` `    ``// Required binary number``    ``return` `bin;``}`` ` `// Function to find octal equivalent of binary``static` `string` `convertBinToOct(``string` `bin)``{``    ``int` `l = bin.Length;``         ` `    ``// Add min 0's in the beginning to make``    ``// string length divisible by 3``    ``for``(``int` `j = 1; j <= (3 - l % 3) % 3; j++)``        ``bin = ``'0'` `+ bin;``         ` `    ``// Create map between binary and its``    ``// equivalent octal code``    ``Dictionary<``string``,``               ``char``> bin_oct_map = ``new` `Dictionary<``string``,``                                                  ``char``>();``    ` `    ``bin_oct_map.Add(``"000"``, ``'0'``);``    ``bin_oct_map.Add(``"001"``, ``'1'``);``    ``bin_oct_map.Add(``"010"``, ``'2'``);``    ``bin_oct_map.Add(``"011"``, ``'3'``);``    ``bin_oct_map.Add(``"100"``, ``'4'``);``    ``bin_oct_map.Add(``"101"``, ``'5'``);``    ``bin_oct_map.Add(``"110"``, ``'6'``);``    ``bin_oct_map.Add(``"111"``, ``'7'``);``         ` `    ``int` `i = 0;``    ``string` `octal = ``""``; ``    ` `    ``while` `(``true``)``    ``{``        ` `        ``// One by one extract from left, substring``        ``// of size 3 and add its octal code``        ``octal += bin_oct_map[bin.Substring(i, 3)];``        ``i += 3;``        ` `        ``if` `(i == bin.Length)``            ``break``;    ``    ``}``         ` `    ``// Required octal number``    ``return` `octal;``}`` ` `// Function to find octal equivalent of decimal``static` `string` `decToOctal(``int` `n)``{``    ` `    ``// Convert decimal to binary``    ``string` `bin = decToBin(n);``     ` `    ``// Convert binary to octal``    ``// required octal equivalent``    ``// of decimal``    ``return` `convertBinToOct(bin);``}`` ` `// Driver Code``public` `static` `void` `Main(``string``[] args)``{``    ``int` `n = 151;``    ` `    ``Console.Write(decToOctal(n));``}``}` `// This code is contributed by rutvik_56`

## Javascript

 ``

Output:

`227`

Time Complexity: O(n), where n is the length of the binary string.

My Personal Notes arrow_drop_up