Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/08/2010, 20:43
Avatar de mortiprogramador
mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Códigos - Reto Romanos

abimaelrc

Código PHP:
Ver original
  1. <?php
  2. function romanNumber($number){
  3.     // Array que contiene los valores númericos, tanto romanos como los regulares
  4.     $arr = array(
  5.         array(1, 'I'),
  6.         array(5, 'V'),
  7.         array(10, 'X'),
  8.         array(50, 'L'),
  9.         array(100, 'C'),
  10.         array(500, 'D'),
  11.         array(1000, 'M'),
  12.         array(5000, '<span style="text-decoration: overline">V</span>'),
  13.         array(10000, '<span style="text-decoration: overline">X</span>'),
  14.         array(50000, '<span style="text-decoration: overline">L</span>'),
  15.         array(100000, '<span style="text-decoration: overline">C</span>'),
  16.         array(500000, '<span style="text-decoration: overline">D</span>'),
  17.         array(1000000, '<span style="text-decoration: overline">M</span>'),
  18.     );
  19.  
  20.     // rN -> romanNumber
  21.     $rN = '';
  22.  
  23.     // Convertir el valor a string (otra forma de hacerlo es $num = (string)$number;
  24.     $num = "$number";
  25.  
  26.     while(true){
  27.  
  28.         //Solamente verificar los valores que sean mayores de 0
  29.         if($num[0] > 0){
  30.             foreach($arr as $key => $roman){
  31.  
  32.                 // Verifica que el valor del array sea mayor o igual al valor númerico
  33.                 if($roman[0] >= $num){
  34.  
  35.                     // Asigna el valor del array, si el número está entre los valores del array
  36.                     if($roman[0] == $num){ $rN .= $roman[1]; }
  37.  
  38.                     // Si el valor del primer caracter es menor o igual a 3, asigna el valor del array anterior en donde
  39.                     // se encuentre en el bucle por la cantidad de veces que dé el primer caracter
  40.                     elseif($num[0] <= 3){ $rN .= str_repeat($arr[$key - 1][1], $num[0]); }
  41.  
  42.                     // Si el valor del primer caracter es igual a 4, asigna el valor del array anterior primero y el valor que
  43.                     // está en el momento del bucle
  44.                     elseif($num[0] == 4){ $rN .= $arr[$key - 1][1] . $roman[1]; }
  45.  
  46.                     // Si el valor del primer caracter es menor o igual a 8, asigna el valor del array anterior y del que
  47.                     // está antes del anterior, por la cantidad de veces del residuo  de $num[0] - 5
  48.                     elseif($num[0] <= 8){ $rN .= $arr[$key - 1][1] . str_repeat($arr[$key - 2][1], ($num[0] - 5)); }
  49.  
  50.                     // Si el valor del primer caracter es igual a 9, asigna el valor del array del que está antes del anterior
  51.                     // y del valor que está en el momento del bucle
  52.                     elseif($num[0] == 9){ $rN .= $arr[$key - 2][1] . $roman[1]; }
  53.  
  54.                     // Evitar que continúe ya que encontró el valor
  55.                     break;
  56.                 }
  57.             }
  58.         }
  59.  
  60.         // Quita el primer caracter del valor de lo que esté en la variable $num al momento,
  61.         // y así continúa con el proceso hasta que no queda valor
  62.         $num = substr($num, 1);
  63.  
  64.         //Verifica si ya no existe algún valor en la variable $num
  65.         if(empty($num)) break;
  66.     }
  67.  
  68.     return $rN;
  69. }
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com