Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
分析:
1~9: {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
10~90: {"X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
100~900: {"C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
1000~3000: {"M", "MM", "MMM"}.
从前向后遍历罗马数字,如果某个数比前一个数小,则加上该数。反之,减去前一个数的两倍然后加上该数
public class Roman {
public static void main(String[] args){
System.out.println(romanToInt("MV"));
}
public static int romanToInt(String s){
int sum = 0;
for(int i = 0; i < s.length() - 1 ; i++){
//根据罗马数的归路,如果当前的数比后面的数要小,则总数加上当前符号值的负数,否则相反
if( get(s.charAt(i)) < get(s.charAt(i + 1))){
sum += -get(s.charAt(i));
}else{
sum += get(s.charAt(i));
}
}
//不要忘了把最后一个数也加上
sum += get(s.charAt(s.length()-1));
return sum;
}
//获取该字符对应的罗马数的值
public static int get(char x) {
switch (x) {
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;
}
return 0;
}
}