Integer to Roman

MediumHash TableMathString

Solution

export function intToRoman(num: number): string {
  const SYMBOLS = [
    { unit: 1000, symbol: 'M' },
    { unit: 900, symbol: 'CM' },
    { unit: 500, symbol: 'D' },
    { unit: 400, symbol: 'CD' },
    { unit: 100, symbol: 'C' },
    { unit: 90, symbol: 'XC' },
    { unit: 50, symbol: 'L' },
    { unit: 40, symbol: 'XL' },
    { unit: 10, symbol: 'X' },
    { unit: 9, symbol: 'IX' },
    { unit: 5, symbol: 'V' },
    { unit: 4, symbol: 'IV' },
    { unit: 1, symbol: 'I' },
  ] as const;
 
  let roman = '';
  let currentNum = num;
  for (const { unit, symbol } of SYMBOLS) {
    roman += symbol.repeat(Math.floor(currentNum / unit));
    currentNum %= unit;
  }
  return roman;
}