1 题目
2 C语言代码实现
需要注意的点
1 遍历字符串,如果I的下一个是V或者X,返回-=1
2 如果X的下一个是L或者C,则返回-=10
3 如果C的下一个是D或者是M,则返回-=100
4 其余的情况返回原本对应的数字即可
代码逻辑如下
int romanToInt(char* s) {
int result = 0;
while (*s) {
switch (*s) {
case 'I':
if (*(s + 1) == 'V' || *(s + 1) == 'X') {
result -= 1;
}
else {
result += 1;
}
break;
case 'V':
result += 5;
break;
case 'X':
if (*(s + 1) == 'L' || *(s + 1) == 'C') {
result -= 10;
}
else {
result += 10;
}
break;
case 'L':
result += 50;
break;
case 'C':
if (*(s + 1) == 'D' || *(s + 1) == 'M') {
result -= 100;
}
else {
result += 100;
}
break;
case 'D':
result += 500;
break;
case 'M':
result += 1000;
break;
default:
printf("Invalid Roman numeral.\n");
return -1;
}
s++;
}
return result;
}
3 完整测试代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int romanToInt(char* s) {
int result = 0;
while (*s) {
switch (*s) {
case 'I':
if (*(s + 1) == 'V' || *(s + 1) == 'X') {
result -= 1;
}
else {
result += 1;
}
break;
case 'V':
result += 5;
break;
case 'X':
if (*(s + 1) == 'L' || *(s + 1) == 'C') {
result -= 10;
}
else {
result += 10;
}
break;
case 'L':
result += 50;
break;
case 'C':
if (*(s + 1) == 'D' || *(s + 1) == 'M') {
result -= 100;
}
else {
result += 100;
}
break;
case 'D':
result += 500;
break;
case 'M':
result += 1000;
break;
default:
printf("Invalid Roman numeral.\n");
return -1;
}
s++;
}
return result;
}
int main() {
char romanNumeral[20];
printf("Enter a Roman numeral: ");
scanf("%s", romanNumeral);
int result = romanToInt(romanNumeral);
if (result != -1) {
printf("The equivalent integer is: %d\n", result);
}
return 0;
}
1.26