logo

Convertir números romanos a enteros

Dada una cadena en forma romana, la tarea es convertir esta cadena romana dada en un número entero.

números romanos se basan en los siguientes símbolos:



Símbolo

Valor

I



terminal linux kali

1

EN

5



X

bash para el bucle 1 al 10

10

l

50

C

100

rudyard kipling si explicación

D

500

METRO

1000

tipo burbuja java

Ejemplo:

Aporte: IX
Producción: 9
Explicación: IX es un símbolo romano que representa 9

Aporte: SG
Producción: 40
Explicación: XL es un símbolo romano que representa 40

Aporte: MCMIV
Producción: 1904
Explicación: M es mil, CM es novecientos y IV es cuatro

Práctica recomendada de número romano a entero ¡Pruébalo!

Acercarse: Un número en números romanos es una cadena de estos símbolos escritos en orden descendente (por ejemplo, la M primero, seguida de la D, etc.). Sin embargo, en algunos casos específicos, para evitar que se repitan cuatro caracteres seguidos(como IIII o XXXX), notación sustractiva se utiliza a menudo de la siguiente manera:

  • I colocado antes EN o X indica uno menos, por lo que cuatro es IV (uno menos que 5) y 9 es IX (uno menos que 10).
  • X colocado antes l o C indica diez menos, por lo que cuarenta es SG (10 menos que 50) y 90 es XC (diez menos que cien).
  • C colocado antes D o METRO indica cien menos, por lo que cuatrocientos es CD (cien menos que quinientos) y novecientos es CM (cien menos que mil).

Algoritmo para convertir números romanos a números enteros:

  • Divida la cadena de números romanos en símbolos romanos (carácter).
  • Convierte cada símbolo de números romanos en el valor que representa.
  • Tome los símbolos uno por uno comenzando desde el índice 0:
    • Si el valor actual del símbolo es mayor o igual que el valor del siguiente símbolo, agregue este valor al total acumulado.
    • de lo contrario, reste este valor sumando el valor del siguiente símbolo al total acumulado.

A continuación se muestra la implementación del algoritmo anterior:

jpa vs hibernación
C++
// Program to convert Roman // Numerals to Numbers #include  using namespace std; // This function returns value // of a Roman symbol int value(char r) {  if (r == 'I')  return 1;  if (r == 'V')  return 5;  if (r == 'X')  return 10;  if (r == 'L')  return 50;  if (r == 'C')  return 100;  if (r == 'D')  return 500;  if (r == 'M')  return 1000;  return -1; } // Returns decimal value of // roman numaral int romanToDecimal(string& str) {  // Initialize result  int res = 0;  // Traverse given input  for (int i = 0; i < str.length(); i++) {  // Getting value of symbol s[i]  int s1 = value(str[i]);  if (i + 1 < str.length()) {  // Getting value of symbol s[i+1]  int s2 = value(str[i + 1]);  // Comparing both values  if (s1>= s2) { // El valor del símbolo actual // es mayor o igual que // el siguiente símbolo res = res + s1;  } else { // El valor del símbolo actual es // menor que el siguiente símbolo res = res + s2 - s1;  yo ++;  } } más { res = res + s1;  } } devolver resolución; } // Código del controlador int main() { // Considerando que las entradas proporcionadas son válidas string str = 'MCMIV';  corte<< 'Integer form of Roman Numeral is '  << romanToDecimal(str) << endl;  return 0; }>
C
// Program to convert Roman // Numerals to Numbers #include  #include  // This function returns value // of a Roman symbol int value(char r) {  if (r == 'I')  return 1;  if (r == 'V')  return 5;  if (r == 'X')  return 10;  if (r == 'L')  return 50;  if (r == 'C')  return 100;  if (r == 'D')  return 500;  if (r == 'M')  return 1000;  return -1; } // Returns decimal value of // roman numaral int romanToDecimal(char str[]) {  // Initialize result  int res = 0;  // Traverse given input  for (int i = 0; i < strlen(str); i++)  {  // Getting value of symbol s[i]  int s1 = value(str[i]);  if (i + 1 < strlen(str))  {  // Getting value of symbol s[i+1]  int s2 = value(str[i + 1]);  // Comparing both values  if (s1>= s2) { // El valor del símbolo actual // es mayor o igual que // el siguiente símbolo res = res + s1;  } else { // El valor del símbolo actual es // menor que el siguiente símbolo res = res + s2 - s1;  yo ++;  } } más { res = res + s1;  } } devolver resolución; } // Código del controlador int main() { // Considerando que las entradas proporcionadas son válidas char str[10] = 'MCMIV';  printf('La forma entera del número romano es %d',romanToDecimal(str));  devolver 0; }>
Java
// Program to convert Roman // Numerals to Numbers import java.util.*; public class RomanToNumber {  // This function returns  // value of a Roman symbol  int value(char r)  {  if (r == 'I')  return 1;  if (r == 'V')  return 5;  if (r == 'X')  return 10;  if (r == 'L')  return 50;  if (r == 'C')  return 100;  if (r == 'D')  return 500;  if (r == 'M')  return 1000;  return -1;  }  // Finds decimal value of a  // given roman numeral  int romanToDecimal(String str)  {  // Initialize result  int res = 0;  for (int i = 0; i < str.length(); i++) {  // Getting value of symbol s[i]  int s1 = value(str.charAt(i));  // Getting value of symbol s[i+1]  if (i + 1 < str.length()) {  int s2 = value(str.charAt(i + 1));  // Comparing both values  if (s1>= s2) { // El valor del símbolo actual // es mayor o igual que // el siguiente símbolo res = res + s1;  } else { // El valor del símbolo actual es // menor que el siguiente símbolo res = res + s2 - s1;  yo ++;  } } más { res = res + s1;  } } devolver resolución;  } // Código del controlador public static void main(String args[]) { RomanToNumber ob = new RomanToNumber();  // Considerando que las entradas dadas son válidas String str = 'MCMIV';  System.out.println('La forma entera del número romano' + ' es ' + ob.romanToDecimal(str));  } }>
Pitón
# Python program to convert Roman Numerals # to Numbers # This function returns value of each Roman symbol def value(r): if (r == 'I'): return 1 if (r == 'V'): return 5 if (r == 'X'): return 10 if (r == 'L'): return 50 if (r == 'C'): return 100 if (r == 'D'): return 500 if (r == 'M'): return 1000 return -1 def romanToDecimal(str): res = 0 i = 0 while (i < len(str)): # Getting value of symbol s[i] s1 = value(str[i]) if (i + 1 < len(str)): # Getting value of symbol s[i + 1] s2 = value(str[i + 1]) # Comparing both values if (s1>= s2): # El valor del símbolo actual es mayor # o igual al siguiente símbolo res = res + s1 i = i + 1 else: # El valor del símbolo actual es mayor # o igual al siguiente símbolo res = res + s2 - s1 i = i + 2 else: res = res + s1 i = i + 1 return res # Código del controlador print('La forma entera del número romano es'), print(romanToDecimal('MCMIV'))>'>C#= s2) { // El valor del símbolo actual es mayor // o igual al siguiente símbolo res = res + s1;  } más { res = res + s2 - s1;  yo ++; // El valor del símbolo actual es // menor que el siguiente símbolo } } else { res = res + s1;  yo ++;  } } devolver resolución;  } // Código del controlador public static void Main(string[] args) { GFG ob = new GFG();  // Considerando que las entradas dadas son válidas string str = 'MCMIV';  Console.WriteLine('Forma entera del número romano' + ' es ' + ob.romanToDecimal(str));  } } // Este código es aportado por Shrikant13>
JavaScript
>
PHP
 // Program to convert Roman // Numerals to Numbers // This function returns  // value of a Roman symbol function value($r) { if ($r == 'I') return 1; if ($r == 'V') return 5; if ($r == 'X') return 10; if ($r == 'L') return 50; if ($r == 'C') return 100; if ($r == 'D') return 500; if ($r == 'M') return 1000; return -1; } // Returns decimal value // of roman numeral function romanToDecimal(&$str) { // Initialize result $res = 0; // Traverse given input for ($i = 0; $i < strlen($str); $i++) { // Getting value of // symbol s[i] $s1 = value($str[$i]); if ($i+1 < strlen($str)) { // Getting value of // symbol s[i+1] $s2 = value($str[$i + 1]); // Comparing both values if ($s1>= $s2) { // El valor del símbolo actual // es mayor o igual que // el siguiente símbolo $res = $res + $s1; } más { $res = $res + $s2 - $s1; $yo++; // El valor del símbolo actual es // menor que el siguiente símbolo } } else { $res = $res + $s1; $yo++; } } devuelve $res; } // Código del controlador // Considerando que las entradas // dadas son válidas $str ='MCMIV'; echo 'La forma entera del número romano es ', romanToDecimal($str), '
'; // Este código es aportado por ajit ?>>

Producción
Integer form of Roman Numeral is 1904>

Análisis de complejidad:

  • Complejidad del tiempo: O(n), donde n es la longitud de la cuerda.
    Sólo se requiere un recorrido de la cadena.
  • Espacio Auxiliar: O(1), ya que no se requiere espacio adicional.