Zamiana cyfr romańskich na arabskie

Convert Roman Numerals to Arabic Numbers

Przykład PHP2014-03-07 stopień trudności: łatwy

Nie możesz spamiętać jak przeliczać rzymskie cyfry ? nic prostszego. Przykład konwersji cyfr romańskich na arabskie, rzadko przydatne ale czasem bywa...


<?
$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
,
);
//ustawimy przykÅ‚adowo rok 2012
$roman 'MMXII'
;
$result 0
;

foreach (
$romans as $key => $value
) {
    while (
strpos($roman$key) === 0
) {
        
$result += $value
;
        
$roman substr($romanstrlen($key
));
    }
}
echo 
$result
;
?>


Poniżej snippet autorstwa Davida L.Weinera pozwalajÄ…cy odwrócić powyższÄ… zamianÄ™ czyli zamienimy cyfry arabskie na romaÅ„skie.


<?
function to_roman($num
) {

//Function to convert an arabic number ($num) to a roman
//numeral. $num must be between 0 and 9,999

//Funkcja obsÅ‚uguje liczby od 0 and 9,999 

//Copyright 2000 David L. Weiner <davew@webmast.com>. All Rights Reserved

if ($num || $num 9999) { return -1; } 
// out of range

$r_ones = array(1=> "I"2=>"II"3=>"III"4=>"IV"5=>"V"6=>"VI"7=>"VII"8=>"VIII"
,
9=>"IX"
);
$r_tens = array(1=> "X"2=>"XX"3=>"XXX"4=>"XL"5=>"L"6=>"LX"7=>"LXX"
,
8=>"LXXX"9=>"XC"
);
$r_hund = array(1=> "C"2=>"CC"3=>"CCC"4=>"CD"5=>"D"6=>"DC"7=>"DCC"
,
8=>"DCCC"9=>"CM"
);
$r_thou = array(1=> "M"2=>"MM"3=>"MMM"4=>"MMMM"5=>"MMMMM"6=>"MMMMMM"
,
7=>"MMMMMMM"8=>"MMMMMMMM"9=>"MMMMMMMMM"
);

$ones $num 10
;
$tens = ($num $ones) % 100
;
$hundreds = ($num $tens $ones) % 1000
;
$thou = ($num $hundreds $tens $ones) % 10000
;

$tens $tens 10
;
$hundreds $hundreds 100
;
$thou $thou 1000
;

if (
$thou) { $rnum .= $r_thou[$thou
]; }
if (
$hundreds) { $rnum .= $r_hund[$hundreds
]; }
if (
$tens) { $rnum .= $r_tens[$tens
]; }
if (
$ones) { $rnum .= $r_ones[$ones
]; }

return 
$rnum
;

}

$date "2013"
;
$roman to_roman($date
);
echo 
$roman
;
?>



 
close
Strona korzysta z plików cookies. Zastosowane pliki cookie służą jedynie do prowadzenia ogólnych statystyk pozwalających na określenie popularności serwisu.