#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
*/