Skip to content

Instantly share code, notes, and snippets.

@AudyOdi
Created March 3, 2018 04:33
Show Gist options
  • Select an option

  • Save AudyOdi/052365e80dc6e7d12a27b0948d7848fb to your computer and use it in GitHub Desktop.

Select an option

Save AudyOdi/052365e80dc6e7d12a27b0948d7848fb to your computer and use it in GitHub Desktop.
// basic symbols refered to http://www.mathsisfun.com/roman-numerals.html
function getBasicSymbols() {
let symbols = new Map();
symbols.set(1, 'I');
symbols.set(5, 'V');
symbols.set(10, 'X');
symbols.set(50, 'L');
symbols.set(100, 'C');
symbols.set(500, 'D');
symbols.set(1000, 'M');
return symbols;
}
function convertToRoman(num) {
let basicSymbols = getBasicSymbols();
let numLength = num.toString().split('').length;
let divider = (numLength - 1 && Math.pow(10, numLength)) || 1;
let moduler = 10;
let result = '';
while (divider) {
let number = parseInt(num / divider) % moduler;
if (number > 9) {
number = number % moduler;
moduler = moduler * 10;
}
switch (number) {
case 1: {
let symbol = basicSymbols.get(1 * divider);
result = result.concat(symbol);
break;
}
case 2: {
let symbol = basicSymbols.get(1 * divider);
result = result.concat(symbol.repeat(2));
break;
}
case 3: {
let symbol = basicSymbols.get(1 * divider);
result = result.concat(symbol.repeat(3));
break;
}
case 4: {
let firstSymbol = basicSymbols.get(1 * divider);
let secondSymbol = basicSymbols.get(5 * divider);
result = result.concat(`${firstSymbol}${secondSymbol}`);
break;
}
case 5: {
let symbol = basicSymbols.get(5 * divider);
result = result.concat(symbol);
break;
}
case 6: {
let firstSymbol = basicSymbols.get(5 * divider);
let secondSymbol = basicSymbols.get(1 * divider);
result = result.concat(`${firstSymbol}${secondSymbol}`);
break;
}
case 7: {
let firstSymbol = basicSymbols.get(5 * divider);
let secondSymbol = basicSymbols.get(1 * divider);
result = result.concat(`${firstSymbol}${secondSymbol.repeat(2)}`);
break;
}
case 8: {
let firstSymbol = basicSymbols.get(5 * divider);
let secondSymbol = basicSymbols.get(1 * divider);
result = result.concat(`${firstSymbol}${secondSymbol.repeat(3)}`);
break;
}
case 9: {
let firstSymbol = basicSymbols.get(1 * divider);
let secondSymbol = basicSymbols.get(10 * divider);
result = result.concat(`${firstSymbol}${secondSymbol}`);
break;
}
}
divider = parseInt(divider / 10);
}
return result;
}
console.log('29', convertToRoman(29), convertToRoman(29) === 'XXIX');
console.log('44', convertToRoman(44), convertToRoman(44) === 'XLIV');
console.log('500', convertToRoman(500), convertToRoman(500) === 'D');
console.log('501', convertToRoman(501), convertToRoman(501) === 'DI');
console.log('3999', convertToRoman(3999), convertToRoman(3999) === 'MMMCMXCIX');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment