portalmana
Código PHP:
Ver original<?php
/**
* Clase NumerosRomanos.
* Convierte un numero en base decimal a Romano.
*
* @package matematicas creado para forosdelweb.
* @copyright 2010 - ObjetivoPHP
* @license Gratuito (Free) http://www.opensource.org/licenses/gpl-license.html
* @author Marcelo Castro (ObjetivoPHP)
* @version 0.1.0 (16/08/2010 - 16/08/2010)
*/
abstract class NumerosRomanos
{
/**
* Contiene las equivalencias de numeros romanos para unidades, decimales,
* centenas y miles.
* @var array
*/
private static
$_romanos = array(0 => array(1 => 'I', 2 => 'II',
3 => 'III',
4 => 'IV',
5 => 'V',
6 => 'VI',
7 => 'VII',
8 => 'VIII',
9 => 'IX'),
2 => 'XX',
3 => 'XXX',
4 => 'XL',
5 => 'L',
6 => 'LX',
7 => 'LXX',
8 => 'LXXX',
9 => 'XC'),
2 => 'CC',
3 => 'CCC',
4 => 'CD',
5 => 'D',
6 => 'DC',
7 => 'DCC',
8 => 'DCCC',
9 => 'CM'),
2 => 'MM',
3 => 'MMM'));
/**
* Contiene los divisores para identificar por donde comenzar la conversion.
* @var array
*/
private static
$_divisores = array(1, 10, 100, 1000);
/**
* Convierte un numero expresado en decimal a notacion Romana.
* @param integer $numero Numero que se desea convertir en romano.
* desde 0 a 3999.-
* @return string
*/
public static function romanNumber($numero)
{
$retorno = '';
$max = (int
)log10($numero); for ($div = $max; $div > -1; $div--) {
$aux = (int)($numero/self::$_divisores[$div]);
$retorno.= self::$_romanos[$div][$aux];
$numero -=self::$_divisores[$div]*$aux;
}
return $retorno;
}
}