Volver a los desafíos
Fácil 0 resueltos 0% de aceptación

Valor de un número romano

Convierte un número romano a un número decimal.

Lo que aprenderás

  • Asociar símbolos a valores con un diccionario
  • Manejar pares que restan como IV y XC
  • Recorrer una cadena mirando el siguiente carácter

Problema

Ver original (inglés)

Convierte un número romano válido a su valor numérico. Los símbolos son I=1, V=5, X=10, L=50, C=100, D=500, M=1000; un símbolo menor antes de uno mayor se resta (IV = 4, CM = 900).

Implementa roman_to_int(text).

Entrada

text: Un número romano válido.

Salida

Devuelve su valor.

Restricciones

1 ≤ valor ≤ 3,999

Ejemplos

Ejemplo 1
Entrada:
text = "XIV"

Salida esperada:
expected = 14
Entrada:
std::string text = "XIV";

Salida esperada:
long long expected = 14;
Entrada:
string text = "XIV";

Salida esperada:
long expected = 14;

Explicación

X = 10, IV = 4: 14.

Ejemplo 2
Entrada:
text = "MCMXCIV"

Salida esperada:
expected = 1994
Entrada:
std::string text = "MCMXCIV";

Salida esperada:
long long expected = 1994;
Entrada:
string text = "MCMXCIV";

Salida esperada:
long expected = 1994;

Explicación

M=1000, CM=900, XC=90, IV=4: 1994.

Cómo abordarlo

Inténtalo primero por tu cuenta y luego abre las pistas una a una.

Pista 1

La mayoría de los símbolos suman su valor, pero algunos pares restan cuando un símbolo menor aparece antes de uno mayor.

Pista 2

Procesa el número romano de izquierda a derecha y compara cada símbolo con el siguiente.

Pista 3

Asegúrate de manejar bien el último símbolo, porque no tiene ninguno detrás.

Complejidad esperada

tiempo O(n), espacio extra O(1)

Referencias

Este reto está adaptado para CodeUtility. Sigue el enunciado y las restricciones indicadas arriba.

Aprende de otros

Soluciones de la comunidad

Aún no hay soluciones publicadas. Resuelve este reto para compartir la primera.