Convert from any base to decimal and vice versa (original) (raw)

Last Updated : 26 Dec, 2023

Given a number and its base, convert it to decimal. The base of number can be anything such that all digits can be represented using 0 to 9 and A to Z. The value of A is 10, the value of B is 11 and so on. Write a function to convert the number to decimal.

**Examples:

Input number is given as string and output is an integer.
Input: str = "1100", base = 2
Output: 12
Input: str = "11A", base = 16
Output: 282
Input: str = "123", base = 8
Output: 83

**We strongly recommend you to minimize your browser and try this yourself first.
We can always use the below formula to convert from any base to decimal.

"str" is input number as a string
"base" is the base of the input number.
Decimal Equivalent is,
1str[len-1] + basestr[len-2] + (base)2*str[len-3] + ...

Below is implementation of above formula.

Try It Yourselfredirect icon

C++ `

// C++ program of the above approach #include <bits/stdc++.h> using namespace std;

// To return char for a value. For example '2' // is returned for 2. 'A' is returned for 10. 'B' // for 11 char reVal(int num) { if (num >= 0 && num <= 9) return (char)(num + '0'); else return (char)(num - 10 + 'A'); }

// Utility function to reverse a string void strev(char *str) { int len = strlen(str); int i; for (i = 0; i < len/2; i++) { char temp = str[i]; str[i] = str[len-i-1]; str[len-i-1] = temp; } }

// Function to convert a given decimal number // to a base 'base' and char* fromDeci(char res[], int base, int inputNum) { int index = 0; // Initialize index of result

// Convert input number is given base by repeatedly
// dividing it by base and taking remainder
while (inputNum > 0)
{
    res[index++] = reVal(inputNum % base);
    inputNum /= base;
}
res[index] = '\0';

// Reverse the result
strev(res);

return res;

}

// Driver Code int main() { int inputNum = 282, base = 16; char res[100]; cout << "Decimal Equivalent of " << fromDeci(res, base, inputNum) << " in base "<< base << " is " << inputNum;

return 0;

}

// This code is contributed by code_hunt.

C

// C program to convert a number from any base // to decimal #include <stdio.h> #include <string.h>

// To return value of a char. For example, 2 is // returned for '2'. 10 is returned for 'A', 11 // for 'B' int val(char c) { if (c >= '0' && c <= '9') return (int)c - '0'; else return (int)c - 'A' + 10; }

// Function to convert a number from given base 'b' // to decimal int toDeci(char *str, int base) { int len = strlen(str); int power = 1; // Initialize power of base int num = 0; // Initialize result int i;

// Decimal equivalent is str[len-1]*1 +
// str[len-2]*base + str[len-3]*(base^2) + ...
for (i = len - 1; i >= 0; i--)
{
    // A digit in input number must be
    // less than number's base
    if (val(str[i]) >= base)
    {
       printf("Invalid Number");
       return -1;
    }

    num += val(str[i]) * power;
    power = power * base;
}

return num;

}

// Driver code int main() { char str[] = "11A"; int base = 16; printf("Decimal equivalent of %s in base %d is " " %d\n", str, base, toDeci(str, base)); return 0; }

Java

// Java program to convert // a number from any base // to decimal import java.io.*;

class GFG { // To return value of a char. // For example, 2 is returned // for '2'. 10 is returned // for 'A', 11 for 'B' static int val(char c) { if (c >= '0' && c <= '9') return (int)c - '0'; else return (int)c - 'A' + 10; }

// Function to convert a // number from given base // 'b' to decimal static int toDeci(String str, int base) { int len = str.length(); int power = 1; // Initialize // power of base int num = 0; // Initialize result int i;

// Decimal equivalent is 
// str[len-1]*1 + str[len-2] *
// base + str[len-3]*(base^2) + ...
for (i = len - 1; i >= 0; i--)
{
    // A digit in input number 
    // must be less than 
    // number's base
    if (val(str.charAt(i)) >= base)
    {
    System.out.println("Invalid Number");
    return -1;
    }

    num += val(str.charAt(i)) * power;
    power = power * base;
}

return num;

}

// Driver code public static void main (String[] args) { String str = "11A"; int base = 16; System.out.println("Decimal equivalent of "+ str + " in base "+ base + " is "+ " "+ toDeci(str, base)); } }

// This code is contributed // by anuj_67.

Python3

Python program to convert a

number from any base to decimal

To return value of a char.

For example, 2 is returned

for '2'. 10 is returned for 'A',

11 for 'B'

def val(c): if c >= '0' and c <= '9': return ord(c) - ord('0') else: return ord(c) - ord('A') + 10;

Function to convert a number

from given base 'b' to decimal

def toDeci(str,base): llen = len(str) power = 1 #Initialize power of base num = 0 #Initialize result

# Decimal equivalent is str[len-1]*1 + 
# str[len-2]*base + str[len-3]*(base^2) + ... 
for i in range(llen - 1, -1, -1):
    
    # A digit in input number must 
    # be less than number's base 
    if val(str[i]) >= base:
        print('Invalid Number')
        return -1
    num += val(str[i]) * power
    power = power * base
return num

Driver code

strr = "11A" base = 16 print('Decimal equivalent of', strr, 'in base', base, 'is', toDeci(strr, base))

This code is contributed

by Sahil shelangia

C#

// C# program to convert // a number from any base // to decimal using System;

class GFG { // To return value of a char. // For example, 2 is returned // for '2'. 10 is returned // for 'A', 11 for 'B' static int val(char c) { if (c >= '0' && c <= '9') return (int)c - '0'; else return (int)c - 'A' + 10; }

// Function to convert a // number from given base // 'b' to decimal static int toDeci(string str, int b_ase) { int len = str.Length; int power = 1; // Initialize // power of base int num = 0; // Initialize result int i;

// Decimal equivalent is 
// str[len-1]*1 + str[len-2] *
// base + str[len-3]*(base^2) + ...
for (i = len - 1; i >= 0; i--)
{
    // A digit in input number 
    // must be less than 
    // number's base
    if (val(str[i]) >= b_ase)
    {
    Console.WriteLine("Invalid Number");
    return -1;
    }

    num += val(str[i]) * power;
    power = power * b_ase;
}

return num;

}

// Driver code public static void Main () { string str = "11A"; int b_ase = 16; Console.WriteLine("Decimal equivalent of "+ str + " in base "+ b_ase + " is " + toDeci(str, b_ase)); } }

// This code is contributed // by anuj_67.

JavaScript

PHP

= '0' && $c <= '9') return ord($c) - ord('0'); else return ord($c) - ord('A') + 10; } // Function to convert a number from given // base 'b' to decimal function toDeci($str, $base) { len=strlen(len = strlen(len=strlen(str); $power = 1; // Initialize power of base $num = 0; // Initialize result // Decimal equivalent is str[len-1]*1 + // str[len-2]*base + str[len-3]*(base^2) + ... for ($i = len−1;len - 1; len1;i >= 0; $i--) { // A digit in input number must be // less than number's base if (val($str[$i]) >= $base) { print("Invalid Number"); return -1; } num+=val(num += val(num+=val(str[$i]) * $power; power=power = power=power * $base; } return $num; } // Driver code $str = "11A"; $base = 16; print("Decimal equivalent of $str " . "in base baseis".toDeci(base is " . toDeci(baseis".toDeci(str, $base)); // This code is contributed by mits ?>

`

Output

Decimal equivalent of 11A in base 16 is 282

**Time Complexity: O(N) n represents the length of string
**Auxiliary Space: O(1)

**How to do reverse?

Let the given input decimal number be "inputNum" and target base be "base". We repeatedly divide inputNum by base and store the remainder. We finally reverse the obtained string. Below is C implementation.

C++ `

// C++ Program to convert decimal to any given base #include <bits/stdc++.h> using namespace std;

// To return char for a value. For example '2' // is returned for 2. 'A' is returned for 10. 'B' // for 11 char reVal(int num) { if (num >= 0 && num <= 9) return (char)(num + '0'); else return (char)(num - 10 + 'A'); }

// Function to convert a given decimal number // to a base 'base' and string fromDeci(string& res, int base, int inputNum) { int index = 0; // Initialize index of result

// Convert input number is given base by repeatedly
// dividing it by base and taking remainder
while (inputNum > 0) {
    res.push_back(reVal(inputNum % base));
    index++;
    inputNum /= base;
}

// Reverse the result
reverse(res.begin(), res.end());

return res;

}

// Driver program int main() { int inputNum = 282, base = 16; string res; cout << "Equivalent of " << inputNum << " in base " << base << " is " << fromDeci(res, base, inputNum) << endl;

return 0;

}

// The code is contributed by Gautam goel (gautamgoel962)

C

// C Program to convert decimal to any given base #include <stdio.h> #include <string.h>

// To return char for a value. For example '2' // is returned for 2. 'A' is returned for 10. 'B' // for 11 char reVal(int num) { if (num >= 0 && num <= 9) return (char)(num + '0'); else return (char)(num - 10 + 'A'); }

// Utility function to reverse a string void strev(char *str) { int len = strlen(str); int i; for (i = 0; i < len/2; i++) { char temp = str[i]; str[i] = str[len-i-1]; str[len-i-1] = temp; } }

// Function to convert a given decimal number // to a base 'base' and char* fromDeci(char res[], int base, int inputNum) { int index = 0; // Initialize index of result

// Convert input number is given base by repeatedly
// dividing it by base and taking remainder
while (inputNum > 0)
{
    res[index++] = reVal(inputNum % base);
    inputNum /= base;
}
res[index] = '\0';

// Reverse the result
strev(res);

return res;

}

// Driver program int main() { int inputNum = 282, base = 16; char res[100]; printf("Equivalent of %d in base %d is " " %s\n", inputNum, base, fromDeci(res, base, inputNum)); return 0; }

Java

// Java Program to convert decimal to any given base import java.lang.; import java.io.; import java.util.*;

class GFG {

// To return char for a value. For // example '2' is returned for 2. // 'A' is returned for 10. 'B' for 11 static char reVal(int num) { if (num >= 0 && num <= 9) return (char)(num + 48); else return (char)(num - 10 + 65); }

// Function to convert a given decimal number // to a base 'base' and static String fromDeci(int base1, int inputNum) { String s = "";

// Convert input number is given 
// base by repeatedly dividing it
// by base and taking remainder
while (inputNum > 0)
{
    s += reVal(inputNum % base1);
    inputNum /= base1;
}
StringBuilder ix = new StringBuilder(); 

    // append a string into StringBuilder input1 
    ix.append(s); 

// Reverse the result
return new String(ix.reverse());

}

// Driver code public static void main (String[] args) { int inputNum = 282, base1 = 16; System.out.println("Equivalent of " + inputNum + " in base "+base1+" is " + fromDeci(base1, inputNum)); } }

// This code is contributed by mits

Python3

Python3 Program to convert decimal to

any given base

To return char for a value. For example

'2' is returned for 2. 'A' is returned

for 10. 'B' for 11

def reVal(num):

if (num >= 0 and num <= 9):
    return chr(num + ord('0'));
else:
    return chr(num - 10 + ord('A'));

Utility function to reverse a string

def strev(str):

len = len(str);
for i in range(int(len / 2)):
    temp = str[i];
    str[i] = str[len - i - 1];
    str[len - i - 1] = temp;

Function to convert a given decimal

number to a base 'base' and

def fromDeci(res, base, inputNum):

index = 0; # Initialize index of result

# Convert input number is given base 
# by repeatedly dividing it by base 
# and taking remainder
while (inputNum > 0):
    res+= reVal(inputNum % base);
    inputNum = int(inputNum / base);

# Reverse the result
res = res[::-1];

return res;

Driver Code

inputNum = 282; base = 16; res = ""; print("Equivalent of", inputNum, "in base", base, "is", fromDeci(res, base, inputNum));

This code is contributed by mits

C#

// C# Program to convert decimal to any given base using System; using System.Collections;

class GFG {

// To return char for a value. For // example '2' is returned for 2. // 'A' is returned for 10. 'B' for 11 static char reVal(int num) { if (num >= 0 && num <= 9) return (char)(num + 48); else return (char)(num - 10 + 65); }

// Function to convert a given decimal number // to a base 'base' and static string fromDeci(int base1, int inputNum) { string s = "";

// Convert input number is given 
// base by repeatedly dividing it
// by base and taking remainder
while (inputNum > 0)
{
    s += reVal(inputNum % base1);
    inputNum /= base1;
}
char[] res = s.ToCharArray();

// Reverse the result
Array.Reverse(res);
return new String(res);

}

// Driver code static void Main() { int inputNum = 282, base1 = 16; Console.WriteLine("Equivalent of " + inputNum + " in base "+base1+" is " + fromDeci(base1, inputNum)); } }

// This code is contributed by mits

JavaScript

PHP

= 0 && $num <= 9) return chr($num + ord('0')); else return chr($num - 10 + ord('A')); } // Utility function to reverse a string function strev($str) { len=strlen(len = strlen(len=strlen(str); for ($i = 0; i<i < i<len / 2; $i++) { temp=temp = temp=str[$i]; str[str[str[i] = str[str[str[len - $i - 1]; str[str[str[len - i−1]=i - 1] = i1]=temp; } } // Function to convert a given decimal // number to a base 'base' and function fromDeci($res, base,base, base,inputNum) { $index = 0; // Initialize index of result // Convert input number is given base // by repeatedly dividing it by base // and taking remainder while ($inputNum > 0) { res.=reVal(res.= reVal(res.=reVal(inputNum % $base); inputNum=(int)(inputNum = (int)(inputNum=(int)(inputNum / $base); } // Reverse the result res=strrev(res = strrev(res=strrev(res); return $res; } // Driver Code $inputNum = 282; $base = 16; $res = ""; print("Equivalent of inputNuminbaseinputNum in base inputNuminbasebase is " . fromDeci($res, base,base, base,inputNum)); // This code is contributed by mits ?>

`

Output

Equivalent of 282 in base 16 is 11A

Time Complexity: O(logbasen) where 'n' is the input number and 'base' is the base to which the number is to be converted.

Auxiliary Space: O(logbasen)

Method: Using int function

C++ `

#include #include

using namespace std;

int main() { string n = "1100"; int b = 2; int result = stoi(n, nullptr, b); cout << result << endl; return 0; }

Java

public class GFG { public static void main(String[] args) { String n = "1100"; int b = 2; int result = Integer.parseInt(n, b); System.out.println(result); } }

Python3

n = "1100" b = 2 print(int(n, b))

C#

using System;

class Program { static void Main(string[] args) { string n = "1100"; int b = 2; int result = Convert.ToInt32(n, b); Console.WriteLine(result); } }

JavaScript

const n = '1100'; const b = 2; const result = parseInt(n, b); console.log(result); // Output: 12

`

**Time complexity: O(N) Convert input number is given base by repeatedly inputNum dividing it by base and taking remainder takes O(n) complexity

**Auxiliary Space: O(1)