/**
*
* @author gentleKay
* Given a roman numeral, convert it to an integer.
* Input is guaranteed to be within the range from 1 to 3999.
*
* 给定一个罗马数字,将其转换为整数。
* 输入保证在1到3999之间。
*/
这两题可以对比的进行学习:
integer-to-roman: https://www.cnblogs.com/strive-19970713/p/11238129.html
/**
*
* @author gentleKay
* Given a roman numeral, convert it to an integer.
* Input is guaranteed to be within the range from 1 to 3999.
*
* 给定一个罗马数字,将其转换为整数。
* 输入保证在1到3999之间。
*/
public class Main14 {
public static void main(String[] args) {
String s = "I";
System.out.println(Main14.romanToInt(s));
}
public static int romanToInt(String s) {
char[] ch = s.toCharArray();
char[] roman = {'M','D','C','L','X','V','I'};
int[] num = {1000, 500, 100, 50, 10, 5, 1};
int sum = 0;
for (int i=0;i<ch.length;i++) {
for (int j=0;j<roman.length;j++) {
if (ch[i] == roman[j]) {
sum = sum + num[j];
break;
}
}
}
//"IV","IX"}; 4 , 9 || 5-1 , 10-1
//"XL","XC"}; 40, 90 || 50-10, 100-10
//"CD","CM"}; 400,900 || 500-100,1000-100
// 主要注意上面的6种情况,需要后面的数 - 前面的数, 因为上面的循环统一都是加上去了,所以现在这里减的话要 乘2.
for (int i=0;i<ch.length-1;i++) {
if (ch[i]=='I' && ch[i+1]=='V') {
sum = sum - 2;
}
if (ch[i]=='I' && ch[i+1]=='X') {
sum = sum - 2;
}
if (ch[i]=='X' && ch[i+1]=='L') {
sum = sum - 20;
}
if (ch[i]=='X' && ch[i+1]=='C') {
sum = sum - 20;
}
if (ch[i]=='C' && ch[i+1]=='D') {
sum = sum -200;
}
if (ch[i]=='C' && ch[i+1]=='M') {
sum = sum -200;
}
}
return sum;
}
}