function convertToRoman(num) {
  var romanNumerals = [
    {number: 1,    numeral: "I", sub: 0},
    {number: 5,    numeral: "V", sub: -1},
    {number: 10,   numeral: "X", sub: -2},
    {number: 50,   numeral: "L", sub: -1},
    {number: 100,  numeral: "C", sub: -2},
    {number: 500,  numeral: "D", sub: -1},
    {number: 1000, numeral: "M", sub: -2}
  ];
  
  var rni = romanNumerals.length - 1;
  var result = "";
  var rn, rnx;
  
  while (num > 0 && rni >= 0) {
    rn = romanNumerals[rni];

    while (num >= rn.number) {
      result += rn.numeral;
      num -= rn.number;
    }
    
    // Symbols are placed from left to right in order of value, starting 
    // with the largest. However, in a few specific cases, to avoid four
    // characters being repeated in succession (such as IIII or XXXX),
    // subtractive notation is used where two symbols are used which
    // indicate a smaller number being subtracted from a larger number;
    // for example, 900 is represented as CM, which means 100 subtracted
    // from 1000. 

    if (rn.sub !== 0) {
      rnj = rni + rn.sub;
      rnx = romanNumerals[rnj];
      if (num >= (rn.number - rnx.number)) {
        result = result + rnx.numeral + rn.numeral;
        num -= (rn.number - rnx.number);
      }
    }
    
    --rni;
  }
 
  return result;
}

 

Alternative version:-

function convertToRoman(num) {
  var result = "";
  
  while (num >= 1000) {
    result += "M";
    num -= 1000;
  }
  
  if (num >= 900) {
    result += "CM";
    num -= 900;
  }

  if (num >= 500) {
    result += "D";
    num -= 500;
  }
  
  if (num >= 400) {
    result += "DC";
    num -= 400;
  }
  
  while (num >= 100) {
    result += "C";
    num -= 100;
  }
  
  if (num >= 90) {
    result += "XC";
    num -= 90;
  }
  
  if (num >= 50) {
    result += "L";
    num -= 50;
  }
  
  if (num >= 40) {
    result += "XL";
    num -= 40;
  }
  
  while (num > 10) {
    result += "X";
    num -= 10;
  }
  
  if (num == 9) {
    result += "IX";
    num -= 9;
  }
  
  if (num >= 5) {
    result += "V";
    num -= 5;
  }
  
  if (num == 4) {
    result += "IV";
    num -= 4;
  }
  
  while (num > 0) {
    result += "I";
    num--;
  }
  
  return result;
}

Leave a Reply

Your email address will not be published. Required fields are marked *

Comments Protected by WP-SpamShield Spam Blocker