Roman to Integer
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
罗马数字是阿拉伯数字传入之前使用的一种数码。罗马数字采用七个罗马字母作数字、即Ⅰ(1)、X(10)、C(100)、M(1000)、V(5)、L(50)、D(500)。记数的方法:
相同的数字连写,所表示的数等于这些数字相加得到的数,如 Ⅲ=3;
小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数,如 Ⅷ=8、Ⅻ=12;
小的数字(限于 Ⅰ、X 和 C)在大的数字的左边,所表示的数等于大数减小数得到的数,如 Ⅳ=4、Ⅸ=9;
在一个数的上面画一条横线,表示这个数增值 1,000 倍。
上面是对罗马数字的描述,一共7种符号组合,小的在左边代表的是减,在右边带表的是加。
所以我们可以和前面的字符比,如果小于前面的字符的值,那么加上该字符的值。如果比前面的值大,那么我们前面的字符已经加过了,所以我们要将前面的减去2倍。代码如下:
func romanToInt(s string) int {
romanmap := map[rune]int{'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
var result int = 0
for index, value := range s {
if index == 0 || romanmap[value] <= romanmap[rune(s[index-1])] {
result += romanmap[value]
} else {
result = result - 2*romanmap[rune(s[index-1])] + romanmap[value]
}
}
return result
}