Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
public String intToRoman(int number) {
int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
String[] numerals = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };
StringBuilder result = new StringBuilder();
for (int i = 0; i < values.length; i++) {
while (number >= values[i]) {
number -= values[i];
result.append(numerals[i]);
}
}
return result.toString();
}
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
public int romanToInt(String s) {
if(s.length() < 1) return 0;
int result = 0;
int sub = getRomanValue(s.charAt(0));
int lastv = sub;
for(int i = 1 ; i < s.length(); ++i) {
char curc = s.charAt(i);
int curv = getRomanValue(curc);
if(curv == lastv)
sub += curv;
else if( curv < lastv) {
result += sub;
sub = curv;
} else {
sub = curv - sub;
}
lastv = curv;
}
result += sub;
return result;
}
public int getRomanValue(char c) {
switch(c) {
case 'I': return 1;
case 'V': return 5;
case 'X': return 10;
case 'L': return 50;
case 'C': return 100;
case 'D': return 500;
case 'M': return 1000;
default: return 0;
}
}