pichimnc
pichimnc

Reputation: 65

convert roman numerals using for loop

I can't seem to find what am I missing? if I try 3 it will return II instead of III same thing if it's 8 it will return VII instead of VIII. I just added the 8 and 3 in my numerals variable

    VIII: 8,
    V: 5,
    IV: 4,
    III: 3,
    I: 1,

but if you guys have any suggestion to fix it without adding it in the numerals that would be great

function convertToRoman(num) {
  //values of the numbers
  let numerals = {
    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,
  };
  //passing the new values of the new numbers to convert into numerals
  let newNumeral = "";
  //checking the values of numerals objects
  for (let i in numerals) {
    //using the j variable of num, if the num is still greater than the numerals index it will increment the key to the variable newNumerals and stop the loop, it will subtract the num to the values of numerals .
    for (let j= 0; j <= num; j++ ){
      if(num >= numerals[i]) {
        newNumeral += i;
        num -= numerals[i];
       
      }  
    }
  }
  //return to newNumerals to see the new value.
 return newNumeral;
}

console.log(convertToRoman(3));

Upvotes: 0

Views: 983

Answers (1)

James
James

Reputation: 22247

The second for loop is a bit weird, you don't use j for anything.

You can replace that and the if inside with a simpler while loop.

//values of the numbers
  let numerals = {
    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,
  };

const convertToRoman = (num) => {
  let newNumeral = "";

  for (let i in numerals) {
    while (num >= numerals[i]) {
      newNumeral += i;
      num -= numerals[i];
    }  
  }

  return newNumeral;
}

console.log(convertToRoman(3));
console.log(convertToRoman(1990));

Upvotes: 1

Related Questions