import java.util.Map; import java.util.LinkedHashMap; public class RomanNumeral { private int arabicNumeral; private static final Map<Integer, String> arabicToRomanConversions = new LinkedHashMap<>(); static { arabicToRomanConversions.put(1000, "M"); arabicToRomanConversions.put(900, "CM"); arabicToRomanConversions.put(500, "D"); arabicToRomanConversions.put(400, "CD"); arabicToRomanConversions.put(100, "C"); arabicToRomanConversions.put(90, "XC"); arabicToRomanConversions.put(50, "L"); arabicToRomanConversions.put(40, "XL"); arabicToRomanConversions.put(10, "X"); arabicToRomanConversions.put(9, "IX"); arabicToRomanConversions.put(5, "V"); arabicToRomanConversions.put(4, "IV"); arabicToRomanConversions.put(1, "I"); } public RomanNumeral(int arabicNumeral) { this.arabicNumeral = arabicNumeral; } public String getRomanNumeral() { StringBuilder romanNumeral = new StringBuilder(); for (Map.Entry<Integer, String> conversion : arabicToRomanConversions.entrySet()) { while (arabicNumeral / conversion.getKey() > 0) { arabicNumeral -= conversion.getKey(); romanNumeral.append(conversion.getValue()); } } return romanNumeral.toString(); } }