先看题目
给定一个罗马数字,将其转换成整数,我的思路首先是将罗马数字转换成相应的数字,这里可以使用swich...case语句,然后如果第一个数字比第二个大,第二个比第三个大,则将其对应相加起来,如果第一个数比第二个小,则考虑用后面的数减去前面的数而得到答案。例如:VI=5+1=6,IV=5-1=4;返回最后结果得到答案,。
现在看一下代码部分
int romanToInt(char * s){
int cur = 0,last = 0,i,num = 0;//cur为当前的数字 last为前一个数字
int len = strlen(s);
last = 1000;//开始last默认为最大的数字
for(i = 0; i < len; i++)
{
switch(s[i])
{
case 'I': cur = 1;break;
case 'V': cur = 5;break;
case 'X': cur = 10;break;
case 'L': cur = 50;break;
case 'C': cur = 100;break;
case 'D': cur = 500;break;
case 'M': cur = 1000;break;
}
if(cur <= last)
{
num += cur;//数字正常顺序的时候累加
}
else
{//当上一个罗马数字小于当前罗马数字的时候 进行累减
num += cur - last;
if(i)
num -= last;//如果从第二个开始就要累减 因为上一次循环已经加了一次last 所以累减的时候要将其减掉
}
last = cur;
}
return num;
}
这个算法主要运用到了swich..case语句,以及if选择结构语句。总体来说不是很难,属于是直接暴力开解,但是如果要提高运算效率的话,还是有一定难度的。