Example:
Given "DCXXI" return 621 Given "MCMXCVI" return 1996
- 重复数次:一个罗马数字重复几次,就表示这个数的几倍。
- 右加左减:
- 在较大的罗马数字的右边记上较小的罗马数字,表示大数字加小数字。
- 在较大的罗马数字的左边记上较小的罗马数字,表示大数字减小数字。
- 左减的数字有限制,仅限于I、X、C。比如45不可以写成VL,只能是XLV
- 但是,左减时不可跨越一个位值。比如,99不可以用IC(
)表示,而是用XCIX(
)表示。(等同于阿拉伯数字每位数字分别表示。)
- 左减数字必须为一位,比如8写成VIII,而非IIX。
- 右加数字不可连续超过三位,比如14写成XIV,而非XIIII。(见下方“数码限制”一项。)
- 加线乘千:
- 在罗马数字的上方加上一条横线或者加上下标的Ⅿ,表示将这个数乘以1000,即是原数的1000倍。
- 同理,如果上方有两条横线,即是原数的1000000(
)倍。
- 数码限制:
class Solution {
public int romanToInt(String s) {
char[] array = s.toCharArray();
int total = 0;
int temp = 0;
for(int i=0;i<array.length;i++){
if(i != array.length - 1){
if(num(array[i]) < num(array[i+1]))
temp = -num(array[i]);
else
temp = num(array[i]);
}
else
temp = num(array[i]);
total += temp;
}
return total;
}
public int num(char c){
switch(c){
case 'M':
return 1000;
case 'D':
return 500;
case 'C':
return 100;
case 'L':
return 50;
case 'X':
return 10;
case 'V':
return 5;
case 'I':
return 1;
default:
return 0;
}
}
}