罗马数字转整数
嗯,这是力扣上的一道”easy”题,拿到手来一看卧槽这啥玩意儿,不过仔细分析了一下发现这道题也不是完全不能动手。先是观察罗马数字,可以知道每一个字符对应一个数,需要注意的是I,X,C放在左右两边不同的处理。
倘若我们先忽略I,X,C放左右的差别,不考虑太多只建立程序的基本框架,思路便可以比较清晰,首先设一个sum变量作为整数的结果并初始化为0,开一个字符串读入并对其遍历,采用switch-case语句不同的字符给sum加上其对应的值。这样一个大体的程序框架就出来了,然后考虑I,X,C的左右问题,注意到它们放在右边仍然是加上其对应的值,而放在左边则是减去其对应的值,所以只要加一个判断语句,判断它在左边还是右边,在左边让sum减去其对应的值,在右边则加上其对应的值。
程序代码如下:
int romanToInt(char * s)
{
int i,len,sum=0;
len=strlen(s);
for(i=0;i<len;i++)
{
char c=s[i];
switch(c)
{
case 'I':
if(s[i+1]=='V'||s[i+1]=='X')
sum-=1;
else
sum+=1;
break;
case 'V':
sum+=5;
break;
case 'X':
if(s[i+1]=='L'||s[i+1]=='C')
sum-=10;
else
{
sum+=10;
}
break;
case 'L':
sum+=50;
break;
case 'C':
if(s[i+1]=='D'||s[i+1]=='M')
sum-=100;
else
{
sum+=100;
}
break;
case 'D':
sum+=500;
break;
case 'M':
sum+=1000;
break;
default:
break;
}
}
return sum;
}
下篇范围求和Ⅱ