Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
跟上一题类似,上一题是阿波罗数字转罗马数字,这题是罗马数字转阿拉伯数字,我写的思路是一样的,都是遍历字符串,比较其中一个或两个和罗马数字中是否一致,如果一致便与相应数字相加,得出结果,其中有些特殊情况还是要处理一下,比如字符串长度为1的时候该怎么办。代码中没有注释,有点冗长,并不是最好的解决办法。
具体罗马数字和阿拉伯数字对应表见上一条博文
package Q13RomanToInteger;
import java.util.Scanner;
/**
* @author Bryan
* @since 2017/11/3 9:39
*/
public class Solution {
public static int romanToInt(String s) {
String[] strings = {"I","IV","V","IX","X","XL","L","XC","C","CD","D","CM","M"};
int[] values = {1,4,5,9,10,40,50,90,100,400,500,900,1000};
int result = 0;
for (int i = 12 ; !s.equals("") ; i --) {
if (s.length() > 1){
while (s.substring(0,1).equals(strings[i]) || s.substring(0,2).equals(strings[i])){
if (s.substring(0,1).equals(strings[i])) {
result += values[i];
s = s.substring(1, s.length());
} else if (s.substring(0,2).equals(strings[i])) {
result += values[i];
s = s.substring(2,s.length());
}
if (s.length() == 1 || s.equals("")) {
i ++;
break;
}
}
} else if (s.length() == 1) {
while (s.substring(0, 1).equals(strings[i])) {
if (s.substring(0, 1).equals(strings[i])) {
result += values[i];
s = s.substring(1, s.length());
}
if (s.equals("")) {
break;
}
}
}
}
return result;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
System.out.println(romanToInt(str));
}
}