public class IntegerToRomanConverter { /* Max inpunt = 3999 */ public static String IntegerToRoman(int n) { String decNum = Integer.toString(n); String romanNum = ""; for(int i = 0; i < decNum.length(); i++) { romanNum += getRomanChar(decNum.charAt(decNum.length()-1 -i)+"", i); } return romanNum; } private static String getRomanChar(String x, int pow) { String chars = ""; int value = Integer.parseInt(x); if(value == 0) { return ""; } if(value > 0 && value <= 3) { for(int i = 0; i < value; i++) { chars += getMinimumElement(pow); } return chars; } if(value == 4) { chars += getMinimumElement(pow); chars += getMidElement(pow); return chars; } if(value == 5) { return getMidElement(pow); } if(value > 3 && value <= 8) { chars += getMidElement(pow); value -= 5; chars += getRomanChar(Integer.toString(value), pow); return chars; } chars += getMinimumElement(pow); chars += getMaxElement(pow); // caso in cui e' 9 return chars; } private static String getMinimumElement(int pow) { if(pow == 0) { return "I"; } if(pow == 1) { return "X"; } if(pow == 2) { return "C"; } if(pow == 3) { return "M"; } return null; } private static String getMidElement(int pow) { if(pow == 0) { return "V"; } if(pow == 1) { return "L"; } if(pow == 2) { return "D"; } return null; } private static String getMaxElement(int pow) { return getMinimumElement(pow + 1); //il massimo e' il minimo della potenza successiva } }