w3resource

C++ Exercises: Convert a given roman numeral to a integer

C++ Math: Exercise-19 with Solution

Write a C++ program to convert a given integer to a Roman numeral.

Sample Input: n = VII
Sample Output: Integer 7
Sample Input: n = XIX
Sample Output: Integer 19

Sample Solution:

C++ Code :

#include <iostream>
using namespace std;

// Function to convert a Roman numeral to an integer
int roman_to_integer(string rstr) {
    int n = int(rstr.length());
    if (0 == n) {
        return 0;
    }

    // Initialize the result
    int result = 0;

    // Iterate through each character in the Roman numeral string
    for (int i = 0; i < n; i++) {
        // Switch statement to handle different Roman numeral characters
        switch (rstr[i]) {
            case 'I':
                result += 1;
                break;
            case 'V':
                result += 5;
                break;
            case 'X':
                result += 10;
                break;
            case 'L':
                result += 50;
                break;
            case 'C':
                result += 100;
                break;
            case 'D':
                result += 500;
                break;
            case 'M':
                result += 1000;
                break;
        }
    }

    // Loop to handle subtraction cases (like IV, IX, XL, XC, etc.)
    for (int i = 1; i < n; i++) {
        if ((rstr[i] == 'V' || rstr[i] == 'X') && rstr[i - 1] == 'I') {
            result -= 1 + 1; // Subtract 1 for I and add 1 for V or X
        }

        if ((rstr[i] == 'L' || rstr[i] == 'C') && rstr[i - 1] == 'X') {
            result -= 10 + 10; // Subtract 10 for X and add 10 for L or C
        }

        if ((rstr[i] == 'D' || rstr[i] == 'M') && rstr[i - 1] == 'C') {
            result -= 100 + 100; // Subtract 100 for C and add 100 for D or M
        }
    }

    return result; // Return the resulting integer
}

// Main function to test the roman_to_integer function
int main()  
{  
    // Test cases to convert Roman numerals to integers using the roman_to_integer function
    string s = "VII";
    cout << "Roman " << s << " -> Integer " << roman_to_integer(s) << endl;
    s = "XIX";
    cout << "Roman " << s << " -> Integer " << roman_to_integer(s) << endl;  
    s = "DCCLXXXIX";
    cout << "Roman " << s << " -> Integer " << roman_to_integer(s) << endl;   
    s = "MXCIX";
    cout << "Roman " << s << " -> Integer " << roman_to_integer(s) << endl; 
    s = "MMMMMMMMMMMMMMMMMMMMMMMCDLVI";
    cout << "Roman " << s << " -> Integer " << roman_to_integer(s) << endl;

    return 0;  
}

Sample Output:

Roman VII -> Integer 7
Roman XIX -> Integer 19
Roman DCCLXXXIX -> Integer 789
Roman MXCIX -> Integer 1099
Roman MMMMMMMMMMMMMMMMMMMMMMMCDLVI -> Integer 23456

Flowchart:

Flowchart: Convert a given roman numeral to a integer

C++ Code Editor:

Contribute your code and comments through Disqus.

Previous: Write a C++ program to convert a given integer to a roman numeral.
Next: Write a C++ program to calculate the product of two positive integers represented as strings.

What is the difficulty level of this exercise?



Follow us on Facebook and Twitter for latest update.