diff --git a/tcr-roman-numerals/src/main/java/fr/ippon/kata/numeral/Numerals.java b/tcr-roman-numerals/src/main/java/fr/ippon/kata/numeral/Numerals.java
index bd4088ee9b04d45721bfdf49bbf8945b3dd78503..c7f75d4b0cf8854b78a4a1b509f434455ac0e6cb 100644
--- a/tcr-roman-numerals/src/main/java/fr/ippon/kata/numeral/Numerals.java
+++ b/tcr-roman-numerals/src/main/java/fr/ippon/kata/numeral/Numerals.java
@@ -1,5 +1,6 @@
 package fr.ippon.kata.numeral;
 
+import java.util.Map.Entry;
 import java.util.NavigableMap;
 import java.util.TreeMap;
 
@@ -7,15 +8,12 @@ public class Numerals {
   private static final NavigableMap<Integer, String> CONVERSIONS = buildConversions();
 
   public static String toRoman(int arabic) {
-    if (arabic >= 5) {
-      return "V" + toRoman(arabic - 5);
+    if (arabic == 0) {
+      return "";
     }
 
-    if (arabic == 4) {
-      return "IV";
-    }
-
-    return "I".repeat(arabic);
+    Entry<Integer, String> highestKnownConversion = CONVERSIONS.floorEntry(arabic);
+    return highestKnownConversion.getValue() + toRoman(arabic - highestKnownConversion.getKey());
   }
 
   private static NavigableMap<Integer, String> buildConversions() {