#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;
}

浙公网安备 33010602011771号