DEV Community

stuxnat
stuxnat

Posted on

JavaScript Algorithm: Roman Numeral Converter

Hello! Today I will be writing about how to solve the Roman numeral converter algorithm.

When writing the solution, we have to remember key caveats in the Roman numeral system, like the number 4 being written as 5 minus 1, so IV.

Instead of writing many if statements, we can use a dictionary to solve this problem.

Step 1: Write dictionary.

const dict = {
    1: 'I',
    4: 'IV',
    5: 'V',
    9: 'IX',
    10: 'X',
    40: 'XL',
    50: 'L',
    90: 'XL',
    100: 'C',
    400: 'CD', 
    500: 'D',
    900: 'CM',
    1000: 'M',
}
function toRoman(num) {

}
Enter fullscreen mode Exit fullscreen mode

Step 2. Write an Array of Numbers
Write an array containing the numbers in the dictionary - we will be looping through it. Because we will need to perform some calculations to convert the given number, we will be using subtraction to solve this problem. Starting from the largest value, we will subtract until we no longer can. For this reason, the numbers in the array are written from largest to smallest.

const numbers = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]
Enter fullscreen mode Exit fullscreen mode

Step 3. Write a While-Loop
For this, we will set a variable to an empty string because we will want to append the Roman numeral equivalent to the output string.
If the number in the array is greater than num, then we will go to the following number (this is why the array is in reverse numerical order), compare that to num, and append to the output string whenever we were able to calculate a number.

function toRoman(num) {
    let output = '';
    let i = 0;

    while (num > 0) {
        const subtract = numbers[i];
        if (subtract > num) {
            i++;
        } else {
            num -= subtract;
            output += dict[subtract]

        }
    }
    return output
}
Enter fullscreen mode Exit fullscreen mode

Your final code should look like this:

const numbers = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]

const dict = {
    1: 'I',
    4: 'IV',
    5: 'V',
    9: 'IX',
    10: 'X',
    40: 'XL',
    50: 'L',
    90: 'XL',
    100: 'C',
    400: 'CD',
    500: 'D',
    900: 'CM',
    1000: 'M',
}
function toRoman(num) {
    let output = '';
    let i = 0;

    while (num > 0) {
        const subtract = numbers[i];
        if (subtract > num) {
            i++;
        } else {
            num -= subtract;
            output += dict[subtract]

        }
    }
    return output
}
Enter fullscreen mode Exit fullscreen mode

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

Top comments (0)

Billboard image

Create up to 10 Postgres Databases on Neon's free plan.

If you're starting a new project, Neon has got your databases covered. No credit cards. No trials. No getting in your way.

Try Neon for Free →

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay