Created
March 3, 2018 04:33
-
-
Save AudyOdi/052365e80dc6e7d12a27b0948d7848fb to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // 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