Implementación en C++
Métodos de Conversión de la Biblioteca Estándar
1. Uso de Funciones de Conversión Estándar
#include <iostream>
#include <string>
#include <bitset>
class NumberConverter {
public:
// Decimal a Binario
static std::string decimalToBinary(int decimal) {
return std::bitset<32>(decimal).to_string();
}
// Binario a Decimal
static int binaryToDecimal(const std::string& binary) {
return std::stoi(binary, nullptr, 2);
}
// Conversiones Hexadecimales
static int hexToDecimal(const std::string& hex) {
return std::stoi(hex, nullptr, 16);
}
static std::string decimalToHex(int decimal) {
char buffer[20];
sprintf(buffer, "%X", decimal);
return std::string(buffer);
}
};
Clase de Conversión Personalizada
Conversor de Sistemas Numéricos Completo
class AdvancedNumberConverter {
private:
// Método auxiliar para la conversión de dígitos a valores
static int charToValue(char c) {
if (c >= '0' && c <= '9') return c - '0';
if (c >= 'A' && c <= 'F') return c - 'A' + 10;
if (c >= 'a' && c <= 'f') return c - 'a' + 10;
throw std::invalid_argument("Dígito inválido");
}
public:
// Método genérico de conversión de base
static int toDecimal(const std::string& number, int base) {
int decimal = 0;
int power = 0;
for (int i = number.length() - 1; i >= 0; --i) {
decimal += charToValue(number[i]) * std::pow(base, power++);
}
return decimal;
}
// Conversión de Decimal a cualquier base
static std::string fromDecimal(int decimal, int base) {
if (decimal == 0) return "0";
const std::string digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
std::string result;
while (decimal > 0) {
result = digits[decimal % base] + result;
decimal /= base;
}
return result;
}
};
Ejemplo de Implementación Práctica
int main() {
// Demostraciones de conversión
try {
// Conversiones estándar
std::cout << "Decimal a Binario: "
<< NumberConverter::decimalToBinary(42) << std::endl;
// Conversiones avanzadas
std::cout << "Binario a Decimal: "
<< AdvancedNumberConverter::toDecimal("101010", 2) << std::endl;
// Conversiones Hexadecimales
std::cout << "Hexadecimal a Decimal: "
<< AdvancedNumberConverter::toDecimal("2A", 16) << std::endl;
// Decimal a diferentes bases
std::cout << "Decimal 42 en Base 3: "
<< AdvancedNumberConverter::fromDecimal(42, 3) << std::endl;
}
catch (const std::exception& e) {
std::cerr << "Error de conversión: " << e.what() << std::endl;
}
return 0;
}
Complejidad de los Métodos de Conversión
| Tipo de Conversión |
Complejidad Temporal |
Complejidad Espacial |
| Decimal a Base |
O(log n) |
O(log n) |
| Base a Decimal |
O(k) |
O(1) |
Estrategias de Manejo de Errores
graph TD
A[Validación de Entrada] --> B{¿Entrada Válida?}
B -->|Sí| C[Realizar Conversión]
B -->|No| D[Lanzar Excepción]
C --> E[Devolver Valor Convertido]
D --> F[Manejar el Error Adecuadamente]
Buenas Prácticas
- Usar métodos de conversión de tipo integrados cuando sea posible.
- Implementar un manejo de errores robusto.
- Considerar el rendimiento para conversiones de números grandes.
- Validar la entrada antes de la conversión.
Compilación y Ejecución
Para compilar en Ubuntu 22.04:
g++ -std=c++11 number_converter.cpp -o number_converter
./number_converter
Nota: LabEx recomienda practicar estas técnicas de implementación para dominar las conversiones de sistemas numéricos en C++.