Drill

ProblemsTypeScript › warmup

Write a number in Roman numerals

mediumwarmupTypeScript

A film credit or a chapter heading wants MCMXCIV rather than 1994.

toRoman(amount: int) → string

Solve it in the editor →

Where you start

function toRoman(amount: number): string {
  
}

Worked examples

CallResult
toRoman(1)"I"
toRoman(4)"IV"
toRoman(14)"XIV"
toRoman(1994)"MCMXCIV"

Hint

Keep the values and their symbols in one descending table, including the subtractive pairs. Then it is one greedy pass.

Reference solution in TypeScript
function toRoman(amount: number): string {
  if (amount < 1 || amount > 3999) return '';
  const vals = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1];
  const syms = ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I'];
  let n = amount;
  let result = '';
  for (let i = 0; i < vals.length; i++) {
    while (n >= vals[i]) {
      result += syms[i];
      n -= vals[i];
    }
  }
  return result;
}

The same problem in another language

More warmup problems in TypeScript