Skip to content
Related Articles

Related Articles

Improve Article

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 <bits/stdc++.h>
 
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<string, char> 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<String,
        Character> 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




<script>
 
// Javascript implementation of decimal to octal conversion
// with minimum use of arithmetic operators
 
// function for decimal to binary conversion
// without using arithmetic operators
function decToBin(n)
{
    if (n == 0)
        return "0";
      
    // to store the binary equivalent of decimal
    var 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
function convertBinToOct(bin)
{
    var l = bin.length;
          
    // add min 0's in the beginning to make
    // string length divisible by 3
    for (var i = 1; i <= (3 - l % 3) % 3; i++)
        bin = '0' + bin;
       
    // create map between binary and its
    // equivalent octal code
    var bin_oct_map = new Map();
    bin_oct_map.set("000",'0');
    bin_oct_map.set("001",'1');
    bin_oct_map.set("010",'2');
    bin_oct_map.set("011",'3');
    bin_oct_map.set("100",'4');
    bin_oct_map.set("101",'5');
    bin_oct_map.set("110",'6');
    bin_oct_map.set("111",'7');
       
    var i = 0;
    var octal = "";     
    while (1)
    {
        // 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
function decToOctal(n)
{
    // convert decimal to binary
    var bin = decToBin(n);
     
    // convert binary to octal
    // required octal equivalent of decimal
    return convertBinToOct(bin);
}
 
// Driver program to test above
var n = 151;
document.write( decToOctal(n));ing
 
// This code is contributed by itsok.
</script>

Output: 

227

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

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :