How to convert a Roman number to an integer in C

1 Answer

0 votes
#include <stdio.h>

static int roman_to_number(char ch) {
    switch(ch) {
        case 'I': return 1;  
        case 'V': return 5;  
        case 'X': return 10;  
        case 'L': return 50;  
        case 'C': return 100;  
        case 'D': return 500;  
        case 'M': return 1000;  
        default: return 0;
    }
}

int roman_to_integer(char *s) {
    int i, n = roman_to_number(s[0]);

    printf("n : %i\n", n);
    for (i = 1; s[i]; i++) {
        int previous_n = roman_to_number(s[i - 1]);
        printf("previous_n: %i\n", previous_n);
        int current_n = roman_to_number(s[i]);
        printf("current_n: %i\n", current_n);
        if (previous_n < current_n) {
            n = n - previous_n + (current_n - previous_n);
            printf("n = n - previous_n + (current_n - previous_n) : %i\n", n);
        } else {
            n += current_n;
            printf("n += current_n : %i\n", n);
        }
        
    }
    return n;
}

int main()
{
    char *s = "XCVII";

    printf("%i", roman_to_integer(s));
    
    return 0;
}




/*
XCVII =
XC+V+I+I =
90+5+1+1 =
97
*/


/*
run:

n : 10
previous_n: 10
current_n: 100
n = n - previous_n + (current_n - previous_n) : 90
previous_n: 100
current_n: 5
n += current_n : 95
previous_n: 5
current_n: 1
n += current_n : 96
previous_n: 1
current_n: 1
n += current_n : 97
97

*/

 



answered Mar 30, 2019 by avibootz
edited Aug 8, 2021 by avibootz
...