**Converting Integers to Roman Numerals equivalent in Java**

Let's understand what is the Input and the expected output.

Input : 99

Output: XCIX

Input : 81

Output: LXXXI

Input : 0

Output: not defined

**Algorithm**

**STEP 1:**Note down all Unique characters where Roman numbers deviated from usual Pattern and put them in map.

**Take an example,**Roman equivalent of '1' is 'I'. So we will add this in map,

**map.put(1, "I");**Now no need to add Roman equivalent of '2' as it can be formed from equivalent of '1'

(taking 'I' twice),

Same for 3 (taking 'I' thrice).

This is not the case with Roman equivalent of '4', it has different pattern and not the ('IIII'),

so add it in map.

**map.put(4, "IV");**

**Note:**

**Unique patterns noted here are to support integers from 1 to 399 as program only support till 399.**

Map

map.put(100, "C");

map.put(90, "XC");

map.put(50, "L");

map.put(40, "XL");

map.put(10, "X");

map.put(9, "IX");

map.put(5, "V");

map.put(4, "IV");

map.put(1, "I");

If we want program to support more integers then identify patterns where Roman numbers have unusual patterns after 399 and add it in map.

**STEP 2:**For converting Integer to Roman equivalent, we will start comparing given Integer with largest number in map,

**Eg:**

Map

map.put(100, "C");

map.put(90, "XC");

map.put(50, "L");

map.put(40, "XL");

map.put(10, "X");

map.put(9, "IX");

map.put(5, "V");

map.put(4, "IV");

map.put(1, "I");

check how many times given number(say 153) has 100 in it(1 time, So pick "C" and remove 100 from 153, remaining number is 53),

100: Divide 153/100 = 1 time in 153 (remaining number is 153 - 100 = 53), remaining number is 153%100 = 53

then check how many time remaining number(53) has 90 in it(0 time),

90: 53/90 = 0 time in 53 (remaining number 53), remaining number is 53%90 = 53

then check how many time remaining number(53) has 50 in it(1 time, So pick "L" and remove 50 from 53, remaining number is 3),

50: 53/50 = 1 time in 53 (remaining number is 53 - 50 = 3), remaining number is 53 % 50 = 3

then check how many time remaining number(3) has 40 in it(0 time),

40: 3/40 = 0 time in 40 (remaining number 3), remaining number is 3%40 = 3

then check how many time remaining number(3) has 10 in it(0 time),

10: 3/10 = 0 time in 10 (remaining number 3), remaining number is 3%10 = 3

then check how many time remaining number(3) has 9 in it(0 time),

9: 3/9 = 0 time in 9 (remaining number 3), remaining number is 3%9 = 3

then check how many time remaining number(3) has 5 in it(0 time),

5: 3/5 = 0 time in 5 (remaining number 3), remaining number is 3%5 = 3

then check how many time remaining number(3) has 4 in it(0 time),

4: 3/4 = 0 time in 4 (remaining number 3), remaining number is 3%4 = 3

then check how many time remaining number has(3) 1 in it(3 time, So pick "I"*3 = "III" and remove 1 thrice from 3, remaining number is 0),

1: 3/1 = 3 time in 1 (remaining number is 3 - (1+1+1) = 0), remaining number is 3%1 = 0

We reach 0, no more number present, Stop here are return "CLIII"

**Convert Integer to Roman numerals Java Program**

package miscellaneous; import java.util.LinkedHashMap; import java.util.Map; public class IntegerToRomanNumber { public static void main(String[] args) { System.out.println(getRomanEquivalentOfInteger(399)); } private static String getRomanEquivalentOfInteger(int number){ if(number<=0){ return "not defined"; } //Noting down all Unique characters where Roman numbers deviated from usual Pattern. //unique patterns noted here are to support integers from 1 to 399 as program only support till 399. //if we want program to support more integers then identify patterns where Roman numbers have unusual patterns after 399 and add it in map. Map<Integer, String> map = new LinkedHashMap<Integer, String>(); map.put(100, "C"); map.put(90, "XC"); map.put(50, "L"); map.put(40, "XL"); map.put(10, "X"); map.put(9, "IX"); map.put(5, "V"); map.put(4, "IV"); map.put(1, "I"); String romanEqui=""; // Iterate map, check how many times given number has 100 in it, then check how many time remaining number has 90 in it and so on. // or we can also say, is number divisible by 100, remaining number is divisible by 90 and so on. // if number is 153, then first will see how many time number has 100 in it, which is 1 time. // 100 - 1 time in 150 (remaining number is 150 - 100 = 53) OR 153/100 = 1 remaining 153%100 = 53 // 90 - 0 time in 53 (remaining number is 53 - 90 = 0) OR 53/90 = 0 remaining 53 % 90 = 53 (we only need to find perfectly divisible numbers.) // 50 - 1 time in 53 (remaining number is 53 - 50 = 3) OR 53/50 = 1 remaining 53 % 50 = 3 // 40 - 0 time in 3 (remaining number is 3 - 40 = 0) OR 3/40 = 0 remaining 3 % 40 = 3 // 10 - 0 time in 3 (remaining number is 3 - 10 = 0) OR 3/10 = 0 remaining 3 % 10 = 3 // 9 - 0 time in 3 (remaining number is 3 - 9 = 0) OR 3/9 = 0 remaining 3 % 9 = 3 // 5 - 0 time in 3 (remaining number is 3 - 5 = 0) OR 3/5 = 0 remaining 3 % 5 = 3 // 4 - 0 time in 3 (remaining number is 3 - 4 = 0) OR 3/4 = 0 remaining 3 % 4 = 3 // 1 - 3 time in 3 (remaining number is 3 - 1 = 0) OR 3/1 = 3 remaining 3 % 1 = 0 for (Map.Entry<Integer, String> entry : map.entrySet()) { int key = entry.getKey(); if(number/key!=0){ for (int i = 0; i < (number/key); i++) { romanEqui = romanEqui + map.get(key); } number = number % key; } } return romanEqui; } }

**Enjoy !!!!**

**If you find any issue in post or face any error while implementing, Please comment.**

## Post a Comment