Bird
Raised Fist0
DSA C#programming~20 mins

Roman to Integer Conversion in DSA C# - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Roman Numeral Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of Roman to Integer Conversion Function
What is the output of the following C# code that converts a Roman numeral string to an integer?
DSA C#
using System;
using System.Collections.Generic;

class Program {
    static int RomanToInt(string s) {
        Dictionary<char, int> map = new Dictionary<char, int>() {
            {'I', 1}, {'V', 5}, {'X', 10}, {'L', 50}, {'C', 100}, {'D', 500}, {'M', 1000}
        };
        int total = 0;
        for (int i = 0; i < s.Length; i++) {
            if (i + 1 < s.Length && map[s[i]] < map[s[i + 1]]) {
                total -= map[s[i]];
            } else {
                total += map[s[i]];
            }
        }
        return total;
    }

    static void Main() {
        Console.WriteLine(RomanToInt("MCMXCIV"));
    }
}
ANone (runtime error)
B1904
C1994
D2094
Attempts:
2 left
💡 Hint
Remember that when a smaller Roman numeral appears before a larger one, it should be subtracted.
🧠 Conceptual
intermediate
1:30remaining
Understanding Subtraction Rule in Roman Numerals
In Roman numeral conversion, why do we subtract the value of a numeral when it appears before a larger numeral?
ABecause it represents a smaller value that modifies the larger numeral by subtraction.
BBecause Roman numerals are always added regardless of order.
CBecause the smaller numeral is a mistake and should be ignored.
DBecause the smaller numeral doubles the value of the larger numeral.
Attempts:
2 left
💡 Hint
Think about how IV means 4, not 6.
🔧 Debug
advanced
2:00remaining
Identify the Bug in Roman to Integer Conversion
What error will occur when running this code snippet for Roman numeral conversion?
DSA C#
using System;
using System.Collections.Generic;

class Program {
    static int RomanToInt(string s) {
        Dictionary<char, int> map = new Dictionary<char, int>() {
            {'I', 1}, {'V', 5}, {'X', 10}, {'L', 50}, {'C', 100}, {'D', 500}, {'M', 1000}
        };
        int total = 0;
        for (int i = 0; i <= s.Length; i++) {
            if (i + 1 < s.Length && map[s[i]] < map[s[i + 1]]) {
                total -= map[s[i]];
            } else {
                total += map[s[i]];
            }
        }
        return total;
    }

    static void Main() {
        Console.WriteLine(RomanToInt("IX"));
    }
}
AKeyNotFoundException
BIndexOutOfRangeException
CNo error, output is 9
DNullReferenceException
Attempts:
2 left
💡 Hint
Check the loop condition and how the index is used.
❓ Predict Output
advanced
2:00remaining
Output of Modified Roman to Integer Code
What is the output of this modified Roman to Integer code when input is "XLII"?
DSA C#
using System;
using System.Collections.Generic;

class Program {
    static int RomanToInt(string s) {
        Dictionary<char, int> map = new Dictionary<char, int>() {
            {'I', 1}, {'V', 5}, {'X', 10}, {'L', 50}, {'C', 100}, {'D', 500}, {'M', 1000}
        };
        int total = 0;
        int prev = 0;
        for (int i = s.Length - 1; i >= 0; i--) {
            int current = map[s[i]];
            if (current < prev) {
                total -= current;
            } else {
                total += current;
            }
            prev = current;
        }
        return total;
    }

    static void Main() {
        Console.WriteLine(RomanToInt("XLII"));
    }
}
A42
B48
C44
D52
Attempts:
2 left
💡 Hint
This code processes the string from right to left.
🧠 Conceptual
expert
1:30remaining
Why Use a Dictionary for Roman Numeral Conversion?
Why is a dictionary (hash map) the best data structure to map Roman numerals to integers in conversion algorithms?
ABecause it stores numerals in a linked list for easy traversal.
BBecause it automatically sorts the numerals in ascending order.
CBecause it compresses the numeral data to save memory.
DBecause it provides fast lookup of numeral values by character in constant time.
Attempts:
2 left
💡 Hint
Think about how often you need to find the value of each Roman character.

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. Multiply values of all symbols
C. Add values of symbols, subtract if a smaller symbol is before a larger one
D. Add values only if symbols are in alphabetical order

Solution

  1. Step 1: Understand Roman numeral rules

    Roman numerals add values unless a smaller symbol is before a larger one, then subtract.
  2. Step 2: Apply rule to conversion

    When converting, add values normally but subtract when a smaller symbol precedes a larger one.
  3. Final Answer:

    Add values of symbols, subtract if a smaller symbol is before a larger one -> Option C
  4. Quick Check:

    Roman numeral conversion rule = Add values of symbols, subtract if a smaller symbol is before a larger one [OK]
Hint: Subtract only when smaller symbol is before larger one [OK]
Common Mistakes:
  • Multiplying values instead of adding/subtracting
  • Ignoring subtraction rule
  • Adding all values without checking order
2. Which C# code snippet correctly initializes a dictionary for Roman numeral values?
easy
A. var map = new Dictionary { {'I', 1}, {'V', 5} };
B. var map = new Dictionary { {1, 'I'}, {5, 'V'} };
C. var map = new Dictionary { {'I', 1}, {'V', 5} };
D. var map = new Dictionary { {'I', "1"}, {'V', "5"} };

Solution

  1. Step 1: Identify correct dictionary types

    Roman numerals are characters mapped to integer values, so Dictionary is correct.
  2. Step 2: Check initialization syntax

    Initialization with curly braces and pairs like {'I', 1} is correct syntax in C#.
  3. Final Answer:

    var map = new Dictionary { {'I', 1}, {'V', 5} }; -> Option A
  4. Quick Check:

    Dictionary with correct pairs = var map = new Dictionary { {'I', 1}, {'V', 5} }; [OK]
Hint: Use Dictionary for Roman numeral mapping [OK]
Common Mistakes:
  • Swapping key and value types
  • Using string keys instead of char
  • Incorrect initialization syntax
3. What is the output of this C# code snippet?
string s = "IX";
var map = new Dictionary { {'I', 1}, {'V', 5}, {'X', 10} };
int result = 0;
for (int i = 0; i < s.Length; i++) {
  if (i + 1 < s.Length && map[s[i]] < map[s[i + 1]]) {
    result -= map[s[i]];
  } else {
    result += map[s[i]];
  }
}
Console.WriteLine(result);
medium
A. 9
B. 11
C. 6
D. 1

Solution

  1. Step 1: Analyze loop and conditions

    For 'IX', at i=0: 'I' < 'X' so subtract 1; at i=1: add 10.
  2. Step 2: Calculate result

    result = -1 + 10 = 9.
  3. Final Answer:

    9 -> Option A
  4. Quick Check:

    IX = 9 [OK]
Hint: Subtract when current < next symbol, else add [OK]
Common Mistakes:
  • Adding all values without subtraction
  • Off-by-one errors in loop
  • Incorrect dictionary values
4. Find the error in this C# code for Roman to integer conversion:
var map = new Dictionary { {'I', 1}, {'V', 5}, {'X', 10} };
int result = 0;
for (int i = 0; i < s.Length - 1; i++) {
  if (map[s[i]] < map[s[i + 1]]) {
    result -= map[s[i]];
  } else {
    result += map[s[i]];
  }
}
result += map[s[s.Length - 1]];
Console.WriteLine(result);
medium
A. No error, code works correctly
B. Missing initialization of string s
C. Loop should run till i < s.Length, not s.Length - 1
D. Dictionary keys should be strings, not chars

Solution

  1. Step 1: Check variable declarations

    The variable 's' is used but not declared or initialized, causing a compile error.
  2. Step 2: Verify loop and dictionary usage

    Loop and dictionary usage are correct; only 's' is missing.
  3. Final Answer:

    Missing initialization of string s -> Option B
  4. Quick Check:

    Undefined variable s causes error = Missing initialization of string s [OK]
Hint: Always declare and initialize variables before use [OK]
Common Mistakes:
  • Forgetting to declare input string
  • Incorrect loop range causing index errors
  • Wrong dictionary key types
5. Given the Roman numeral string "MCMXCIV", what integer does the following C# code output?
string s = "MCMXCIV";
var map = new Dictionary {
  {'I', 1}, {'V', 5}, {'X', 10}, {'L', 50}, {'C', 100}, {'D', 500}, {'M', 1000}
};
int result = 0;
for (int i = 0; i < s.Length; i++) {
  if (i + 1 < s.Length && map[s[i]] < map[s[i + 1]]) {
    result -= map[s[i]];
  } else {
    result += map[s[i]];
  }
}
Console.WriteLine(result);
hard
A. 1494
B. 1904
C. 2000
D. 1994

Solution

  1. Step 1: Break down the Roman numeral "MCMXCIV"

    M=1000, CM=900, XC=90, IV=4; sum = 1000 + 900 + 90 + 4.
  2. Step 2: Calculate total value using code logic

    Code subtracts smaller before larger and adds others: 1000 - 100 + 1000 - 10 + 100 - 1 + 5 = 1994.
  3. Final Answer:

    1994 -> Option D
  4. Quick Check:

    MCMXCIV = 1994 [OK]
Hint: Sum values, subtract when smaller precedes larger [OK]
Common Mistakes:
  • Adding all values without subtraction
  • Misreading compound numerals like CM or XC
  • Incorrect dictionary values
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard