首页 > 编程知识 正文

数字转换为罗马数字,罗马数字转整数js

时间:2023-05-03 19:19:46 阅读:51169 作者:802

Given a roman numeral,convertittoaninteger.inputisguaranteed

to be within the range from 1 to 3999。

思路

罗马数字有以下符号:

基本文字IVXLCDM为阿拉伯数字1510501005001000 1~9: {“I”、“II”、“III”、“IV”、“VI”、“VII”、“VIII”、”}

10至90: {“x”、“XX”、“XXX”、“XL”、“l”、“LX”、“LXXX”、“xc”};

100~900: {“C”、“CC”、“CCC”、“CD”、“d”、“DC”、“DCC”、“DCCC”、“cm”};

1000至3000: {“m”、“MM”和“mmm”}。

计数规则:

如果继续写相同的数字,显示的数量等于这些数字的总和。 例如,III=3

小数字在大数字的右侧,显示的数量等于这些数字的总和。 例如,VIII=8

小数字。 只有在(I、x、c )位于较大数字的左侧时,显示的数字才是较大的数字减去较小的数字。 示例: IV=4

正常使用时,连续的数字重复不得超过3次

在一个数上画一条横线,表示这个数放大了1000倍。 (因为本题只考虑了3999以内的数量,所以不能使用这个规则) ) )。

其次,从罗马数字到阿拉伯数字的规则(仅限3999以内) :

从前到后遍历罗马数字,如果某个数字小于前一个数字,则将该数字相加。 相反,减去前面数的两倍后再加上那个数。

代码如下。

/** * [romanToInt description]将罗马字符转换为整数* @param [type] $str罗马字符* @return [type]的整数*/function romantoint { $ rerepe for($I=1; $Istrlen($str; $i ) ($pre=chartonumber ) $str[$I-1]; $cur=chartonumber($str[$I]; if($pre$cur ) { $res =$cur - 2 * $pre; } else { $res =$cur; } } return $res;//第二种方法functionRomantoint2($str ) if ) strlen ) $str )1)返回假; $res=0; for($I=0; $Istrlen($str; $i ) ($val=chartonumber ) $str[$I]; if($I==strlen ) $str )-1|||chartonumber ) $str[$I1] )=$val ) $res =$val; else $res -=$val; }返回$ RES; }/** * [charToNumber description]单个罗马字符是与相应数字* @param [type] $char单个罗马字符* @return [type]相对应的整数*/functioncher Case ' v ' :返回5; 布雷克; Case ' x ' :返回10; 布雷克; Case ' l ' :返回50; 布雷克; Case ' c ' :返回100; 布雷克; Case ' d ' :返回500; 布雷克; case 'M': return 1000; 布雷克; }返回0; (echoromantoint1) ) IX ); echoromantoint2(IX ); 整数到罗马数字的转换:

/** *将整数转换为罗马数字* @param Integer $number要转换的整数* @return String转换后的罗马数字*/functioninttoroman($number ) $values=[1000 for($I=0; $Icount($values; $i ) ) while($number=$values[$I] ) { $number -=$values[$i]; $res .=$romanChars[$i]; } } return $res; //方法2functioninttoroman2($number ) $m=[ ' '、' m '、' MM '、' mmm ' ]; $C=[ '、' c '、' CC '、' CCC '、' CD '、' d '、' DC '、' DCC '、' CM']; $X=[ ' '、' x '、' XX '、' XXX '、' XL '、' l '、' LX '、' LXXX '、' XC']; $I=[ '、' I '、' II '、' III '、' IV '、' v '、' VI '、' VIII '、' IX']; return $ m [ $ number/1000 ].$ c [ floor ].$ number 00/100 ].$ x [ floor ] $ number0/10 ].$ I [ floor ] Echointtoroman2(1001;

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。