// 1. 可以同时处理最简和非最简的罗马数字 // 2. 不处理加横线扩大1000倍的情况,也就是最大只处理"M" // 3. 不作合法性检查,如"L"不能出现在"C"前面 int Digit(char c) { if (c == 'I') { return 1; } else if (c == 'V') { return 5; } else if (c == 'X') { return 10; } else if (c == 'L') { return 50; } else if (c == 'C') { return 100; } else if (c == 'D') { return 500; } else if (c == 'M') { return 1000; } return 0; } int Roman(char* roman) { int len; len = strlen(roman); if (len == 0) { return 0; } if (len == 1) { return Digit(*roman); } int r1; int r2; r1 = Digit(*roman); r2 = Digit(*(roman + 1)); if (r1 >= r2) { return r1 + Roman(roman + 1); } else { return (r2 - r1) + Roman(roman + 2); } }