Convertir de cualquier base a decimal y viceversa

Dado un número y su base, conviértelo a decimal. La base del número puede ser cualquier cosa tal que todos los dígitos se puedan representar usando del 0 al 9 y de la A a la Z. El valor de A es 10, el valor de B es 11 y así sucesivamente. Escribe una función para convertir el número a decimal.

Ejemplos: 

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 

Le recomendamos encarecidamente que minimice su navegador y que pruebe esto usted mismo primero.  
Siempre podemos usar la siguiente fórmula para convertir de cualquier base a decimal.

"str" is input number as a string 
"base" is the base of the input number.

Decimal Equivalent is,
  1*str[len-1] + base*str[len-2] + (base)2*str[len-3] + ...

A continuación se muestra la implementación de la fórmula anterior.  

C++

// C++ program of th 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 << "Equivalent of " << inputNum << "in base "<< base << "is " <<
                                            fromDeci(res, base, 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.

PHP

<?php
// PHP 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'
function val($c)
{
    if ($c >= '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($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; $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($str[$i]) * $power;
        $power = $power * $base;
    }
 
    return $num;
}
 
// Driver code
$str = "11A";
$base = 16;
print("Decimal equivalent of $str " .
      "in base $base is " . toDeci($str, $base));
 
// This code is contributed by mits
?>

Javascript

<script>
 
// Javascript 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'
function val(c)
{
    if (c >= '0'.charCodeAt() &&
        c <= '9'.charCodeAt())
        return (c - '0'.charCodeAt());
    else
        return (c - 'A'.charCodeAt() + 10);
}
 
// Function to convert a
// number from given base
// 'b' to decimal
function toDeci(str, b_ase)
{
    let len = str.length;
     
    // Initialize
    // power of base
    let power = 1;
     
    // Initialize result
    let num = 0;
    let 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].charCodeAt()) >= b_ase)
        {
            document.write("Invalid Number");
            return -1;
        }
 
        num += val(str[i].charCodeAt()) * power;
        power = power * b_ase;
    }
    return num;
}
 
// Driver code
let str = "11A";
let b_ase = 16;
 
document.write("Decimal equivalent of "+
               str + " in base "+ b_ase +
               " is " + toDeci(str, b_ase));
                
// This code is contributed by divyesh072019
 
</script>

Producción : 

Decimal equivalent of 11A in base 16 is 282

Complejidad de tiempo: O(N) n representa la longitud de la string

Complejidad espacial : O(1)

¿Cómo hacer al revés?  
Deje que el número decimal de entrada dado sea «inputNum» y la base de destino sea «base». Dividimos repetidamente inputNum por base y almacenamos el resto. Finalmente invertimos la string obtenida. A continuación se muestra la implementación de C.

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

PHP

<?php
// PHP 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
function reVal($num)
{
    if ($num >= 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($str);
    for ($i = 0; $i < $len / 2; $i++)
    {
        $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
function 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 = strrev($res);
 
    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
?>

Javascript

<script>
    // Javascript 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
    function reVal(num)
    {
        if (num >= 0 && num <= 9)
            return String.fromCharCode(num + 48);
        else
            return String.fromCharCode(num - 10 + 65);
    }
 
    // Function to convert a given decimal number
    // to a base 'base' and
    function fromDeci(base1, inputNum)
    {
        let s = "";
 
        // Convert input number is given
        // base by repeatedly dividing it
        // by base and taking remainder
        while (inputNum > 0)
        {
            s += reVal(inputNum % base1);
            inputNum = parseInt(inputNum / base1, 10);
        }
        let res = s.split('');
 
        // Reverse the result
        res.reverse();
        return res.join("");
    }
     
    let inputNum = 282, base1 = 16;
    document.write("Equivalent of " + inputNum +
                            " in base "+base1+" is " +
                            fromDeci(base1, inputNum));
 
// This code is contributed by rameshtravel07.
</script>

Producción :

Equivalent of 282 in base 16 is  11A

Complejidad de tiempo: O (N) El número de entrada de conversión se basa en inputNum repetidamente dividiéndolo por la base y tomando el resto toma O (n) complejidad 

Espacio Auxiliar : O(1)

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *