From a4205f344061d467afcd617187c7182f86bf7284 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 28 Jul 2022 18:29:49 +0200 Subject: [PATCH] [Feature] Helper for Roman Numerals --- .../org/betterx/bclib/util/RomanNumeral.java | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/main/java/org/betterx/bclib/util/RomanNumeral.java diff --git a/src/main/java/org/betterx/bclib/util/RomanNumeral.java b/src/main/java/org/betterx/bclib/util/RomanNumeral.java new file mode 100644 index 00000000..819ffbd9 --- /dev/null +++ b/src/main/java/org/betterx/bclib/util/RomanNumeral.java @@ -0,0 +1,45 @@ +package org.betterx.bclib.util; + +import java.util.TreeMap; + +/** + * base on ... + */ + +public class RomanNumeral { + private final static TreeMap LITERALS = new TreeMap<>(); + + private static void lazyInit() { + if (LITERALS.isEmpty()) { + LITERALS.put(1000, "M"); + LITERALS.put(900, "CM"); + LITERALS.put(500, "D"); + LITERALS.put(400, "CD"); + LITERALS.put(100, "C"); + LITERALS.put(90, "XC"); + LITERALS.put(50, "L"); + LITERALS.put(40, "XL"); + LITERALS.put(10, "X"); + LITERALS.put(9, "IX"); + LITERALS.put(5, "V"); + LITERALS.put(4, "IV"); + LITERALS.put(1, "I"); + } + } + + public static String toRoman(int number) { + lazyInit(); + return _toRoman(number); + } + + private static String _toRoman(int number) { + //there is no 0 in roman, but we need it anyway ;) + if (number == 0) return "0"; + + int l = LITERALS.floorKey(number); + if (number == l) { + return LITERALS.get(number); + } + return LITERALS.get(l) + _toRoman(number - l); + } +}