题目:
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
解法:规则与上一篇博客一样,只是这次输入为字符串,我们一样从高位开始遍历,逢M+1000,逢D+500,以此类推,需要注意的是减法的组合:IV,IX,XC,XL,CD,CM,单独拿出来讨论即可。
public class No13_RomanToInteger {
public static void main(String[] args){
System.out.println(romanToInt("MMDCCXCIV"));
}
public static int romanToInt(String s) {
int ret = 0;
int p = 0;
while(p < s.length()){
if(p+1<s.length() && s.charAt(p+1)=='M' && s.charAt(p)=='C'){
ret += 900;
p += 2;
continue;
}
if(p+1<s.length() && s.charAt(p+1)=='D' && s.charAt(p)== 'C'){
ret += 400;
p += 2;
continue;
}
if(p+1<s.length() && s.charAt(p+1)=='C' && s.charAt(p)== 'X'){
ret += 90;
p += 2;
continue;
}
if(p+1<s.length() && s.charAt(p+1)=='L' && s.charAt(p)== 'X'){
ret += 40;
p += 2;
continue;
}
if(p+1<s.length() && s.charAt(p+1)=='X' && s.charAt(p)== 'I'){
ret += 9;
p += 2;
continue;
}
if(p+1<s.length() && s.charAt(p+1)=='V' && s.charAt(p)== 'I'){
ret += 4;
p += 2;
continue;
}
if(s.charAt(p) == 'M'){
ret += 1000;
p++;
continue;
}
if(s.charAt(p) == 'D'){
ret += 500;
p++;
continue;
}
if(s.charAt(p) == 'C'){
ret += 100;
p++;
continue;
}
if(s.charAt(p) == 'L'){
ret += 50;
p++;
continue;
}
if(s.charAt(p) == 'X'){
ret += 10;
p++;
continue;
}
if(s.charAt(p) == 'V'){
ret += 5;
p++;
continue;
}
if(s.charAt(p) == 'I'){
ret += 1;
p++;
continue;
}
}
return ret;
}
}