Task

Create a function taking a positive integer as its parameter and returning a string containing the Roman numeral representation of that integer. Modern Roman numerals are written by expressing each digit separately, starting with the left most digit and skipping any digit with a value of zero.



In Roman numerals:

 1990 is rendered: 1000=M, 900=CM, 90=XC; resulting in MCMXC
 2008 is written as 2000=MM, 8=VIII; or MMVIII
 1666 uses each Roman symbol in descending order: MDCLXVI


string to_roman(int n) 
  requires (n > 0 && n < 5000)
{
  const int[] weights = {1000, 900, 500, 400, 100, 90,
                         50, 40, 10, 9, 5, 4, 1};
  const string[] symbols = {"M","CM","D","CD","C","XC","L",
                            "XL","X","IX","V","IV","I"};
 
  var roman = "", count = 0;
  foreach (var w in weights) {
    while (n >= w) {
      roman += symbols[count];
      n -= w;
    }
    if (n == 0)
      break;
    count++;
  }
  return roman;
}
 
void main() {
  print("%s\n", to_roman(455));
  print("%s\n", to_roman(3456));
  print("%s\n", to_roman(2488));
}