#13 罗马数字转整数(C)

(1)解题思路
step1:求出字符串s的长度n。定义一个变量sum并初始化为0,用来保存转换成整数后的结果。定义一个长度为n的辅助数组temp,用来保存字符串s中的每个字符对应的数值。

step2:利用for循环遍历字符串s中的每个字符。循环过程中,利用switch将字符串s中的每个字符分别转换为对应的数值,并且保存到辅助数组temp中。

step3:利用for循环遍历temp数组的前n-1个单元。每轮循环中,用if语句判断一下当前数组元素与下一个数组元素的大小:若当前数组元素大于或等于下一个数组元素,则将当前数组元素的值累加到sum中;否则,将当前数组元素的值的相反数累加到sum中。

step4:将数组temp的最后一个数组元素累加到sum中。(注:若在step3中处理最后一个数组单元,会导致数组越界!)

step5:返回sum。

(2)代码

int romanToInt(char * s){   
   
    int n = strlen(s);      //求出字符串s的长度
    int sum = 0;            //用sum保存转换成整数后的结果
    int temp[n];            //将s中的每个字符分别转换为对应的数值后保存到辅助数组temp中

    for(int i = 0; i < n; i++){                      //遍历字符串s的每一个字符        
        switch(s[i]){                                //将字符对应的数值保存到temp数组中         
            case 'I': temp[i] = 1;   break;

            case 'V': temp[i] = 5;   break;
            
            case 'X': temp[i] = 10;   break;
           
            case 'L': temp[i] = 50;   break;          
        
            case 'C': temp[i] = 100;   break;
            
            case 'D': temp[i] = 500;   break;

            case 'M': temp[i] = 1000;   break;
        }
    }

    for(int i =0; i < n - 1; i++){     //遍历temp数组的前n-1个单元,求出转换成整数的结果,保存到sum中
        if(temp[i] >= temp[i+1]){      //注意:若遍历到第n个单元,会出现数组越界!
            sum += temp[i];
        }else{
            sum -= temp[i];
        }
    }
    sum += temp[n-1];                 //处理数组最后一个单元                  
    
    return sum;
}
posted @ 2024-07-16 23:06  KenWan  阅读(47)  评论(0)    收藏  举报