题目描述及示例:
解法1:C
分析题目,可知,当右边的数大于左边的数时,左边的数取负值。
例如MCMXCIV,其中M=1000,C=100,X=10,I=1,V=5。
则MCMXCIV=1000+(-100)+1000+(-10)+100+(-1)+5=1994。
代码实现如下:
int getKey(char s)
{
//查表用
int key=0;
switch(s)
{
case 'I': key=1; break;
case 'V': key=5; break;
case 'X': key=10; break;
case 'L': key=50; break;
case 'C': key=100; break;
case 'D': key=500; break;
case 'M': key=1000; break;
default: key=0;
}
return key;
}
int romanToInt(char *s)
{
//左边比右边小,左边为负数
int len=strlen(s); //字符串长度
int prekey=0,key=0; //prekey左边数,key右边数
int sum=0; //返回数值
int i=1; //工具人指针,从字符串第二个字母开始
if(len==1)
sum=getKey(s[0]); //字符串只有一个字母
else
{
while(i<len)
{
prekey=getKey(s[i-1]);
key=getKey(s[i++]);
if(prekey<key)
prekey=-prekey; //小于取负
sum=sum+prekey;
}
sum=sum+key;
}
return sum;
}
运行结果: