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程序设计有所帮助。