Back to all solutions

#12 - Integer to Roman

Problem Description

Roman numerals are represented by seven different symbols: `I`, `V`, `X`, `L`, `C`, `D` and `M`.

Symbol Value I 1 V 5 X 10 L 50 C 100 D 500 M 1000 For example, `2` is written as `II` in Roman numeral, just two one's added together. `12` is written as `XII`, which is simply `X + II`.

The number `27` is written as `XXVII`, which is `XX + V + II`.

Roman numerals are usually written largest to smallest from left to right.

However, the numeral for four is not `IIII`. Instead, the number four is written as `IV`. Because the one is before the five we subtract it making four. The same principle applies to the number nine, which is written as `IX`. There are six instances where subtraction is used:

  • `I` can be placed before `V (5)` and `X (10)` to make 4 and 9.
  • `X` can be placed before `L (50)` and `C (100)` to make 40 and 90.
  • `C` can be placed before `D (500)` and `M (1000)` to make 400 and 900.

Given an integer, convert it to a roman numeral.

Solution

/**
 * @param {number} num
 * @return {string}
 */
var intToRoman = function(num) {
  const map = {
    M: 1000, CM: 900, D: 500, CD: 400, C: 100, XC: 90,
    L: 50, XL: 40, X: 10, IX: 9, V: 5, IV: 4, I: 1
  };

  return Object.entries(map).reduce((result, [letter, n]) => {
    result += letter.repeat(Math.floor(num / n));
    num %= n;
    return result;
  }, '');
};