Problem: Write a Java program to convert octal into its corresponding decimal representation.

Example:

Input:   14
Output:  12
 
Input:   5
Output:  5

Method 1: Using While Loop

Octal to Decimal

To convert octal into a decimal, we multiply the digits of the octal with their respective exponential value of 8 (8position from the right – 1) and sum them up.

In Java, we use while loop to iterate through the digits as follows:

import java.util.Scanner;
 
public class Main
{
	public static void main(String[] args) {
	    Scanner in = new Scanner(System.in);
	    int i=0, decimal=0, digit;
	    
	    //Input an Octal Number
		System.out.println("Enter a Octal Number");
		int octal = in.nextInt();
		
		while(octal>0){
		    //extract digit
		    digit = octal%10; 
		    
		    //multiply with exponential of 8 and add to the decimal
		    decimal += Math.pow(8,i++)* digit; 
		    
		    //remove digit from the octal number
		    octal = octal/10;
		}
		
		//output the octal number
		System.out.println("Decimal: "+decimal);
	}
}

Output:

Enter a Octal Number
14
Decimal: 12

Method 2: Using Recursion

The approach used in this method is the same as the above program but is implemented in a recursive fashion.

In each recursive call, we extract the digit from the octal number, multiply it with its respective exponential value of 8 and return its sum with the next recursive call’s result.

import java.util.Scanner;
 
public class Main
{
	public static void main(String[] args) {
	    Scanner in = new Scanner(System.in);
	    
	    //Input an Octal Number
		System.out.println("Enter a Octal Number");
		int octal = in.nextInt();
		
		//call the recursive function and output the returned result
		System.out.println("Decimal: "+octalToDec(octal,0));
	}
	
	//'i' represents the nth recursive call as well as the
    //(n-1)th digit from left, so it can be used as an exponent
	private static int octalToDec(int oct, int i){
	    //base condition
	    if(oct == 0)
	        return 0;
	        
        //extract digit
        int digit = oct%10;
        
        //multiply with exponential of 8 and add with next recusive call
	    return (int)Math.pow(8,i)*digit + octalToDec(oct/10, ++i);
	}
}

Output:

Enter a Octal Number
10
Decimal: 8

It is important to note that in the recursive call statement, we pass the octal value by eliminating the digit which has been processed in the current recursive call.

Leave a Reply