php实现阿拉伯数字和罗马数字相互转换的方法
本文实例讲述了php实现阿拉伯数字和罗马数字相互转换的方法。分享给大家供大家参考。具体如下:
<?php
//Functionthatcalculatestheromanstringtothegivennumber:
functiondec2roman($f)
{
//Returnfalseifeither$fisnotarealnumber,
//$fisbiggerthan3999or$fislowerorequalto0:
if(!is_numeric($f)||$f>3999||$f<=0)returnfalse;
//Definetheromanfigures:
$roman=array(
'M'=>1000,
'D'=>500,
'C'=>100,
'L'=>50,
'X'=>10,
'V'=>5,
'I'=>1
);
//Calculatetheneededromanfigures:
foreach($romanas$k=>$v)
if(($amount[$k]=floor($f/$v))>0)
$f-=$amount[$k]*$v;
//Buildthestring:
$return='';
foreach($amountas$k=>$v)
{
$return.=$v<=3?str_repeat($k,$v):$k.$old_k;
$old_k=$k;
}
//Replacesomespacialcasesandreturnthestring:
returnstr_replace(array('VIV','LXL','DCD'),array('IX','XC','CM'),$return);
}
//echodec2romen(1981);
//Functiontogetthedecimalvalueofaromanstring:
functionroman2dec($str='')
{
//Returnfalseifnotatleastoneletterisinthestring:
if(is_numeric($str))returnfalse;
//Definetheromanfigures:
$roman=array(
'M'=>1000,
'D'=>500,
'C'=>100,
'L'=>50,
'X'=>10,
'V'=>5,
'I'=>1
);
//Convertthestringtoanarrayofromanvalues:
for($i=0;$i<strlen($str);$i++)
if(isset($roman[strtoupper($str[$i])]))
$values[]=$roman[strtoupper($str[$i])];
//Calculatethesumofthatarray:
$sum=0;
while($current=current($values))
{
$next=next($values);
$next>$current?$sum+=$next-$current+0*next($values):$sum+=$current;
}
//Returnthevalue:
return$sum;
}
//echoroman2dec(IX);
?>
希望本文所述对大家的php程序设计有所帮助。