|
|
|
| Как отсортировать римские цифры, подайте идею пожалуйста. | |
|
|
|
|
|
|
|
для: gOFREe
(01.08.2015 в 17:42)
| | Сконвертируйте в арабские, отсортируйте, сконвертируйте обратно. | |
|
|
|
|
|
|
|
для: Саня
(02.08.2015 в 22:35)
| | Такая функция сойдет?
<?
function number_to_roman($value)
{
if($value<0) return "";
if(!$value) return "0";
$thousands=(int)($value/1000);
$value-=$thousands*1000;
$result=str_repeat("M",$thousands);
$table=array(
900=>"CM",500=>"D",400=>"CD",100=>"C",
90=>"XC",50=>"L",40=>"XL",10=>"X",
9=>"IX",5=>"V",4=>"IV",1=>"I");
while($value) {
foreach($table as $part=>$fragment) if($part<=$value) break;
$amount=(int)($value/$part);
$value-=$part*$amount;
$result.=str_repeat($fragment,$amount);
}
return $result;
}
?>
|
| |
|
|
|
|
|
|
|
для: gOFREe
(03.08.2015 в 11:16)
| | Не знаю. Вы пробовали её протестировать? | |
|
|
|
|
|
|
|
для: Саня
(03.08.2015 в 13:27)
| | Да, из арабских в римские переводит, а вот функция переводит из римских в арабские
<?
function roman2dec ($linje) {
# Fixing variable so it follows my convention
$linje = strtoupper($linje);
# Removing all not-roman letters
$linje = ereg_replace("[^IVXLCDM]", "", $linje);
print("\$linje = $linje<br>");
# Defining variables
$romanLettersToNumbers = array("M" => 1000, "D" => 500, "C" => 100, "L" => 50, "X" => 10, "V" => 5, "I" => 1);
$oldChunk = 1001;
# Looping through line
for($start = 0; $start < strlen($linje); $start++) {
$chunk = substr($linje, $start, 1);
$chunk = $romanLettersToNumbers[$chunk];
if($chunk <= $oldChunk) {
$calculation .= " + $chunk";
} else {
$calculation .= " + " . ($chunk - (2 * $oldChunk));
}
$oldChunk = $chunk;
}
# Summing it up
eval("\$calculation = $calculation;");
return $calculation;
}
?>
|
| |
|
|
|