Função para trabalhar com números Romanos. A primeira é para converter numero INTEIRO para ROMANO e a segundo o contrário, número ROMANO para INTEIRO.
/** * Converter número inteiro para romano */ function numberIntegerToRoman($num, $debug = false){ $n = intval($num); $nRoman = ''; $default = array( 'M' => 1000, 'CM' => 900, 'D' => 500, 'CD' => 400, 'C' => 100, 'XC' => 90, 'L' => 50, 'XL' => 40, 'X' => 10, 'IX' => 9, 'V' => 5, 'IV' => 4, 'I' => 1, ); foreach ($default as $roman => $number){ $matches = intval($n / $number); $nRoman .= str_repeat($roman, $matches); $n = $n % $number; } if($debug){ return sprintf('%s = %s', $num, $nRoman); } return $nRoman; }
/** * Converter número romano para inteiro */ function numberRomanToInteger($numRoman, $debug = false){ $nRoman = $numRoman; $default = array( 'M' => 1000, 'CM' => 900, 'D' => 500, 'CD' => 400, 'C' => 100, 'XC' => 90, 'L' => 50, 'XL' => 40, 'X' => 10, 'IX' => 9, 'V' => 5, 'IV' => 4, 'I' => 1, ); $int = 0; foreach ($default as $key => $value) { while (strpos($numRoman, $key) === 0) { $int += $value; $numRoman = substr($numRoman, strlen($key)); } } if($debug){ return sprintf('%s = %s', $nRoman, $int); } return $int; }
Utilização:
echo numberIntegerToRoman(2016, true); /* Saída: 2016 = MMXVI */
echo numberRomanToInteger('MMXVI', true); /* Saída: MMXVI = 2016 */
echo numberIntegerToRoman(2016); /* Saída: MMXVI */
echo numberRomanToInteger('MMXVI'); /* Saída: 2016 */
Deixe um comentário