Reputation: 65
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
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