rocj
2/3/2018 - 3:52 AM

[罗马数字转十进制数] 接收罗马数字字符串,返回一个 int 型十进制数 #字符串处理

[罗马数字转十进制数] 接收罗马数字字符串,返回一个 int 型十进制数 #字符串处理

int RomanNumberToDecimal(char* roman) {
    int index[26] = {
    0,0,100,500,0,0,0, //C-100 D-500
    0,1,0,0,50,1000,0, //I-1 L-50 M-1000
    0,0,0,0,0,0,
    0,5,0,10,0,0};     //V-5 X-10
    int n = 0, i = 0;
    while(i < strlen(roman) - 1) {
        int p = index[roman[i] - 'A'];
        int q = index[roman[i+1] - 'A'];
        if(p >= q) {
            n += p;
            i += 1;
        }else {        //两位字母组成一个数的情况
            n += q - p;
            i += 2;
        }
    }
    //while 结束时 i = strlen(roman)-1 或 strlen(roman)
    //i = strlen(roman)-1 时,最后一位字母没有计算
    if(i == strlen(roman) - 1) {
        n += index[roman[i] - 'A'];
    }
    return n;
}