Skip to content

Instantly share code, notes, and snippets.

@SH4DY
Created April 8, 2015 20:44
Show Gist options
  • Save SH4DY/55844a077f02d5260107 to your computer and use it in GitHub Desktop.
Save SH4DY/55844a077f02d5260107 to your computer and use it in GitHub Desktop.
Roman number conversion, following the rules: Symbols are placed from left to right in order of value, starting with the largest. However, in a few specific cases,[2] to avoid four characters being repeated in succession (such as IIII or XXXX) these can be reduced using subtractive notation as follows:[3][4] the numeral I can be placed before V …
public class RomanConversion {
public static void main(String[] args){
System.out.println(toRoman(1904));
}
public static String toRoman(int x){
StringBuilder sb = new StringBuilder();
String number = x + "";
//Thousands
int i = number.length()-3;
if(i > 0){
int thousands = Integer.parseInt(number.substring(0, i));
for(; thousands > 0; thousands--){
sb.append("M");
}
}
int l = number.length();
//Hundreds
if(number.length() >= 3) {
int hundreds = Integer.parseInt(number.substring(l-3, l-2));
switch (hundreds) {
case 1:
sb.append("C");
break;
case 2:
sb.append("CC");
break;
case 3:
sb.append("CCC");
break;
case 4:
sb.append("CD");
break;
case 5:
sb.append("D");
break;
case 6:
sb.append("DC");
break;
case 7:
sb.append("DCC");
break;
case 8:
sb.append("DCCC");
break;
case 9:
sb.append("CM");
break;
}
}
//Tens
if(number.length() >= 2) {
int tens = Integer.parseInt(number.substring(l-2, l-1));
switch (tens) {
case 1:
sb.append("X");
break;
case 2:
sb.append("XX");
break;
case 3:
sb.append("XXX");
break;
case 4:
sb.append("XL");
break;
case 5:
sb.append("L");
break;
case 6:
sb.append("LX");
break;
case 7:
sb.append("LXX");
break;
case 8:
sb.append("LXXX");
break;
case 9:
sb.append("XC");
break;
}
}
//Units
if(number.length() >= 1) {
int units = Integer.parseInt(number.substring(l-1, l));
switch (units) {
case 1:
sb.append("I");
break;
case 2:
sb.append("II");
break;
case 3:
sb.append("III");
break;
case 4:
sb.append("IV");
break;
case 5:
sb.append("V");
break;
case 6:
sb.append("VI");
break;
case 7:
sb.append("VIII");
break;
case 8:
sb.append("VIIII");
break;
case 9:
sb.append("IX");
break;
}
}
return sb.toString();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment