Related Articles

Related Articles

Decimal to octal conversion with minimum use of arithmetic operators
  • Last Updated : 04 Dec, 2020

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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


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.




My Personal Notes arrow_drop_up
Recommended Articles
Page :