Buscamos en el mundo on line y así regalarte la respuesta a tu duda, en caso de inquietudes puedes dejarnos un comentario y responderemos con gusto, porque estamos para ayudarte.
Solución:
Qué tal esto:
$romans = 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,
);
$roman = 'MMMCMXCIX';
$result = 0;
foreach ($romans as $key => $value)
while (strpos($roman, $key) === 0)
$result += $value;
$roman = substr($roman, strlen($key));
echo $result;
que debería generar 3999 para el suministro $roman
. Parece funcionar para mis pruebas limitadas:
MCMXC = 1990
MM = 2000
MMXI = 2011
MCMLXXV = 1975
Es posible que también desee hacer alguna validación primero 🙂
No estoy seguro de si tienes ZF o no, pero en caso de que lo tengas (o cualquiera de los que estés leyendo esto) aquí está mi fragmento:
$number = new Zend_Measure_Number('MCMLXXV', Zend_Measure_Number::ROMAN);
$number->convertTo (Zend_Measure_Number::DECIMAL);
echo $number->getValue();
- Zend_Measure_Number en framework.zend.com
Este es el que se me ocurrió, también agregué el control de validez.
class RomanNumber XL
Nos encantaría que puedieras dar recomendación a esta sección si te fue útil.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)