Given a number in a given base, convert it into another target base.
Examples
Input : Number = "123" Source Base = 8 Target Base = 10 Output : 83 3 * 1 + 2 * 8 + 1 * 64 = 83 Input : Number = "110" Source Base = 2 Target Base = 10 Output : 6
The idea is to use toString() method present in the Integer wrapper class. We also use partseInt() to parse given string representation of number in a given base.
Java
// Java program to convert one base to other public class MainClass {
public static String
baseConversion(String number, int sBase, int dBase)
{
// Parse the number with source radix
// and return in specified radix(base)
return Integer.toString(
Integer.parseInt(number, sBase), dBase);
}
public static void main(String[] args)
{
String number = "555" ; // Number
int sBase = 8 ; // Source Base Octal
int dBase = 10 ; // Destination Base Decimal
System.out.println(
"Octal to Decimal: "
+ baseConversion(number, sBase, dBase));
dBase = 16 ; // Destination Base Hexadecimal
System.out.println(
"Octal to Hex: "
+ baseConversion(number, sBase, dBase));
}
} |
Output:
Octal to Decimal: 365 Octal to Hex: 16d
Without using a Predefined method
Java
// Java program to convert one base to other import java.io.*;
import java.util.*;
class Number {
private int base; // 2, 8, 10, 16
private String value; // can be of any base
private Map<Character, Integer>
hexatoDec; // for hexadecimal to decimal conversion
private Map<Integer, Character>
dectoHex; // for decimal to hexadecimal
public Number(String value, int base)
{
this .value = value;
this .base = base;
hexatoDec = new HashMap<>();
dectoHex = new HashMap<>();
for ( int i = 0 ; i < 6 ; i++) {
dectoHex.put( 10 + i, ( char )( 'A' + i));
hexatoDec.put(( char )( 'A' + i), 10 + i);
}
}
public Number(String value)
{
// default base 10
this .base = 10 ;
this .value = value;
}
public String toDecimal()
{
int sum = 0 ;
int pow = 0 ;
String tempVal = this .value;
for ( int i = tempVal.length() - 1 ; i >= 0 ; i--) {
int val = tempVal.charAt(i) - '0' ;
if ( this .base == 16
&& hexatoDec.containsKey(
tempVal.charAt(i))) {
val = hexatoDec.get(tempVal.charAt(i));
}
sum += (val) * (Math.pow( this .base, pow++));
}
return String.valueOf(sum);
}
public String toBase( int targetBase)
{
// take the given number
// convert it into decimal
// divide the decimal with the target base
String val = this .value;
// must be in decimal
if ( this .base != 10 )
val = toDecimal();
int temp = Integer.parseInt(val);
StringBuilder str = new StringBuilder();
while (temp != 0 ) {
int tempValue = temp % targetBase;
if (targetBase == 16
&& dectoHex.containsKey(tempValue)) {
str.insert( 0 , dectoHex.get(tempValue));
}
else {
str.insert( 0 , tempValue);
}
temp /= targetBase;
}
return str.toString();
}
} class GFG {
public static void main(String[] args)
{
Number n1 = new Number( "10AF" , 16 );
System.out.println( "Decimal : " + n1.toDecimal());
System.out.println( "Octal : " + n1.toBase( 8 ));
System.out.println( "Binary : " + n1.toBase( 2 ));
}
} |
Output
Decimal : 4271 Octal : 10257 Octal : 1000010101111