查了下罗马数字的进制与表示规律。
首先是进制:
Roman numerals ( 罗马数字 ) :
I = 1
V = 5
X =10
L = 50
C = 100
D = 500
M = 1000
规律:
III = 1+1+1=3
IV = 5-1=4
VI = 5+1=6
IX = 10-1=9
XI = 10+1=11
XXI = 10+10+1=21
LXX=50+10+10=70
LXXX=80
XC=100-10=90
,,,,,,,,,,,,
如此,总结一下,数字表示从左往右数按照权值从大到小排列,跟阿拉伯数字规律差不多,区别是同样的数字只能连续出现3次,当表示4或者9的时候,需要将小权重的数字如X(10)放在大权重数字C(100)前,做减法。
好了,知道进制与表示规律后,这题思路简单,声明一个结构体,在其中存放权值与对应符号,然后对输入的罗马字符串一一匹配,累加即可。只是在碰到表示4或9及其他们的10倍、100倍等时候要进行判定,特殊处理。