📖 Scenario: Imagine you are building a simple tool that helps people convert Roman numerals into regular numbers. Roman numerals are used in clocks, book chapters, and movie sequels. Your tool will take a Roman numeral string and turn it into an integer number.
🎯 Goal: Build a JavaScript program that converts a Roman numeral string into its integer value by using a dictionary and a loop.
📋 What You'll Learn
Create a dictionary object called romanValues with Roman numeral characters as keys and their integer values as values.
Create a variable called roman and set it to the string 'MCMXCIV'.
Write a loop to go through the roman string and calculate the integer value using the rules of Roman numerals.
Print the final integer result.
💡 Why This Matters
🌍 Real World
Roman numerals are used in clocks, book chapters, movie sequels, and event names. Converting them to numbers helps in calculations and sorting.
💼 Career
Understanding how to map characters to values and process strings with rules is useful in parsing data formats, building calculators, and working with custom encodings.
Progress0 / 4 steps
1
Create the Roman numeral dictionary
Create a JavaScript object called romanValues with these exact entries: 'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000.
DSA Javascript
Hint
Use curly braces {} to create an object. Each Roman numeral letter is a key with its number as the value.
2
Set the Roman numeral string
Create a variable called roman and set it to the string 'MCMXCIV'.
DSA Javascript
Hint
Use const roman = 'MCMXCIV'; to store the Roman numeral string.
3
Calculate the integer value from the Roman numeral
Create a variable called total and set it to 0. Use a for loop with variable i to go through the roman string. Inside the loop, compare the value of the current Roman character roman[i] with the next character roman[i + 1] using romanValues. If the current value is less than the next, subtract it from total. Otherwise, add it to total. After the loop, add the value of the last character to total.
DSA Javascript
Hint
Remember to loop until the second last character and handle the last character after the loop.
4
Print the integer result
Write console.log(total); to print the final integer value of the Roman numeral.
DSA Javascript
Hint
Use console.log(total); to show the final number.
Practice
(1/5)
1. What is the main rule to convert Roman numerals to integers?
easy
A. Subtract all values from the largest symbol
B. Add values of symbols, subtract if a smaller symbol is before a larger one
C. Add values only if symbols are the same
D. Multiply values of symbols in order
Solution
Step 1: Understand Roman numeral rules
Roman numerals are added normally, but if a smaller numeral appears before a larger one, it is subtracted.
Step 2: Apply addition and subtraction rules
For example, IV is 5 - 1 = 4, while VI is 5 + 1 = 6.
Final Answer:
Add values of symbols, subtract if a smaller symbol is before a larger one -> Option B
Quick Check:
Roman numeral rules = Add and subtract [OK]
Hint: Subtract when smaller numeral precedes larger one [OK]
Common Mistakes:
Always adding without subtraction
Multiplying values incorrectly
Ignoring order of symbols
2. Which of the following is the correct JavaScript syntax to get the integer value of a Roman numeral character from a map object named romanMap?
easy
A. romanMap['V']
B. romanMap.get('V')
C. romanMap.V
D. romanMap('V')
Solution
Step 1: Identify the data structure type
If romanMap is a plain JavaScript object, access values using square brackets with the key as a string.
Step 2: Choose correct syntax for object property access
Using romanMap['V'] correctly accesses the value for key 'V'. romanMap.get('V') is for Map objects, not plain objects.
Final Answer:
romanMap['V'] -> Option A
Quick Check:
Object property access = romanMap['V'] [OK]
Hint: Use square brackets for object keys as strings [OK]
Common Mistakes:
Using .get() on plain objects
Using dot notation with string keys
Calling object like a function
3. What will be the output of the following JavaScript code?
function romanToInt(s) {
const map = {I:1, V:5, X:10, L:50, C:100, D:500, M:1000};
let total = 0;
for(let i = 0; i < s.length; i++) {
const current = map[s[i]];
const next = map[s[i+1]] || 0;
if(current < next) {
total -= current;
} else {
total += current;
}
}
return total;
}
console.log(romanToInt('IX'));
medium
A. 9
B. 11
C. 1
D. Error
Solution
Step 1: Trace the loop for input 'IX'
For 'I' (1), next is 'X' (10), since 1 < 10, subtract 1 (total = -1). For 'X' (10), next is undefined (0), so add 10 (total = 9).
Step 2: Calculate final total
Total after loop is 9, which is the integer value of 'IX'.
Final Answer:
9 -> Option A
Quick Check:
'IX' = 9 [OK]
Hint: Subtract if current < next, else add [OK]
Common Mistakes:
Adding all values without subtraction
Ignoring next character check
Off-by-one errors in loop
4. Find the error in this JavaScript function for Roman to Integer conversion:
function romanToInt(s) {
const map = {I:1, V:5, X:10, L:50, C:100, D:500, M:1000};
let total = 0;
for(let i = 0; i <= s.length; i++) {
const current = map[s[i]];
const next = map[s[i+1]] || 0;
if(current < next) {
total -= current;
} else {
total += current;
}
}
return total;
}
medium
A. Use '==' instead of '<' in if condition
B. map object keys should be lowercase
C. total should be initialized to 1
D. Loop condition should be i < s.length, not i <= s.length
Solution
Step 1: Analyze loop boundary
The loop runs from i = 0 to i <= s.length, which means it accesses s[s.length], an undefined index causing current to be undefined.
Step 2: Correct loop condition
Changing loop condition to i < s.length prevents accessing out-of-bound index and avoids errors.
Final Answer:
Loop condition should be i < s.length, not i <= s.length -> Option D
Quick Check:
Loop boundary off-by-one error fixed [OK]
Hint: Use i < length to avoid out-of-bound errors [OK]
Common Mistakes:
Using <= instead of < in loops
Wrong case for map keys
Incorrect comparison operators
5. Given the Roman numeral string 'MCMXCIV', what integer should the conversion function return?
hard
A. 2004
B. 1904
C. 1994
D. 1094
Solution
Step 1: Break down the Roman numeral 'MCMXCIV'
M = 1000, CM = 900 (1000 - 100), XC = 90 (100 - 10), IV = 4 (5 - 1).
Step 2: Add all parts
1000 + 900 + 90 + 4 = 1994 total.
Final Answer:
1994 -> Option C
Quick Check:
'MCMXCIV' = 1994 [OK]
Hint: Identify subtractive pairs and sum all values [OK]
Common Mistakes:
Adding all numerals without subtraction
Misreading subtractive pairs
Confusing similar numerals
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.