Programa Php para convertir números romanos a decimales entre 1 y 3999

Dado un número romano, la tarea es encontrar su valor decimal correspondiente.

Ejemplo : 

Input: IX
Output: 9
IX is a Roman symbol which represents 9 
Input: XL
Output: 40
XL is a Roman symbol which represents 40

Input: MCMIV
Output: 1904
M is a thousand, 
CM is nine hundred and 
IV is four

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

SYMBOL       VALUE
  I            1
  IV           4
  V            5
  IX           9
  X            10
  XL           40
  L            50
  XC           90
  C            100
  CD           400
  D            500
  CM           900 
  M            1000

Enfoque: Un número en números romanos es una string 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 cuatro caracteres se repitan en sucesión (como IIII o XXXX), la notación sustractiva se usa a menudo de la siguiente manera: 

  • Coloqué antes de V o X indica uno menos, entonces cuatro es IV (uno menos que 5) y 9 es IX (uno menos que 10).
  • X colocado antes de L o C indica diez menos, por lo que cuarenta es XL (10 menos que 50) y 90 es XC (diez menos que cien).
  • C colocada antes de D o M 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:  

  1. Divida la string de números romanos en símbolos romanos (carácter).
  2. Convierta cada símbolo de números romanos en el valor que representa.
  3. Tome el símbolo uno por uno desde el índice 0: 
    1. Si el valor actual del símbolo es mayor o igual que el valor del siguiente símbolo, agregue este valor al total acumulado.
    2. 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: 

PHP

<?php
// 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)
            {
                // Value of current symbol 
                // is greater or equal to 
                // the next symbol
                $res = $res + $s1;
            }
            else
            {
                $res = $res + $s2 - $s1;
  
                // Value of current symbol is
                // less than the next symbol
                $i++; 
            }
        }
        else
        {
            $res = $res + $s1;
            $i++;
        }
    }
    return $res;
}
  
// Driver Code
  
// Considering inputs
// given are valid
$str ="MCMIV";
echo 
"Integer form of Roman Numeral is ",
 romanToDecimal($str), "";
// This code is contributed by ajit
?>

Producción:

Integer form of Roman Numeral is 1904

Análisis de Complejidad: 

  • Complejidad de tiempo: O(n), donde n es la longitud de la string. 
    Solo se requiere un recorrido de la string.
  • Complejidad espacial: O(1). 
    Como no se requiere espacio adicional.

Consulte el artículo completo sobre la conversión de números romanos a decimales entre 1 y 3999 para obtener más detalles.

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 *