Dado un número romano, la tarea es encontrar el valor decimal correspondiente.
Nota: los números romanos están representados por siete símbolos diferentes: I, V, X, L, C, D y M.
Ejemplos:
Entrada: “III”
Salida: 3
Entrada: “MDCCLX”
Salida: 1760
Acercarse:
- Recorre cada carácter de la string que contiene los números romanos.
- Compare el valor del símbolo romano actual con el valor del símbolo romano a su derecha. Si el valor actual es mayor o igual que el valor del símbolo a la derecha, agregue el valor del símbolo actual al total. Si el valor actual es menor que el valor del símbolo a la derecha, reste el valor del símbolo actual del total.
A continuación se muestra la implementación del enfoque anterior:
Java
// Java Program to Convert a Roman // Number to Decimal using Hashmap import java.io.*; import java.util.Scanner; import java.util.HashMap; class solution { int romanToInt(String s) { // Create a empty hash map. HashMap<Character, Integer> map = new HashMap<>(); // Putting value in hash map. map.put('I', 1); map.put('V', 5); map.put('X', 10); map.put('L', 50); map.put('C', 100); map.put('D', 500); map.put('M', 1000); // Creating integer variable to store result. int result = 0; // initialize loop to iterate in string. for (int i = 0; i < s.length(); i++) { // Checking that current element // is not smaller then previous if (i > 0 && map.get(s.charAt(i)) > map.get(s.charAt(i - 1))) { result += map.get(s.charAt(i)) - 2 * map.get(s.charAt(i - 1)); } else { result += map.get(s.charAt(i)); } } // Returning the integer value of Roman number. return result; } } public class GFG { public static void main(String[] args) { String s; // Scanner sc = new Scanner(System.in); // s = sc.nextLine(); solution gfg = new solution(); System.out.println(gfg.romanToInt("MDCCLX")); } }
Producción:
1760
Complejidad de tiempo: O(N)
Espacio Auxiliar: O(1)