问题

实现罗马数字和阿拉伯数字之间的转换

LeetCode

分析

罗马字母和阿拉伯数字之间的对应:

罗马字母 阿拉伯数字
I 1
V 5
X 10
L 50
C 100
D 500
M 1000

罗马数字的组成规则:

  1. 字母能累计叠加,如I是1,II是2,III是3
  2. 表示10的n(n=0、1、2、3)次幂的字母(也即I、X、C、M)最多只能重复3次;而剩余的三个字母V、L、D,则不能被重复
  3. 右加左减,但是不能跨位相减,也就是百位能减十位,但不能减个数位,类似的,千位只能减百位,不能减十位、个位
  4. 不能左减5、50、500,即V、L、D这三个字母
  5. 如果同时有两个相对小数值字母分列紧挨在一个大数值字母旁,则第一个(即左边的)小数值字母必须大于第二个(即右边的)小数值字母,如140只能表示成CXL而不是XCL

下面是判断是否是合法罗马数字的正则表达式:^M?M?M?(CM|CD|D?C?C?C?)(XC|XL|L?X?X?X?)(IX|IV|V?I?I?I?)$

源码

mycode

参考:

http://www.ohehlium.com/journal/2007/02/04/268/ http://en.wikipedia.org/wiki/Roman_numerals

TOP