您的位置:首页 > 其它

Rome to Intger

2013-12-11 02:47 288 查看
一次AC

关键是读懂题意


记数方法

基本字符
I
V
X
L
C
D
M
相应的阿拉伯数字表示为
1
5

10
50
100
500
1000
相同的数字连写,所表示的数等于这些数字相加得到的数,如:Ⅲ = 3;

小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数, 如:Ⅷ = 8;Ⅻ = 12;

小的数字,(限于Ⅰ、X 和C)在大的数字的左边,所表示的数等于大数减小数得到的数,如:Ⅳ= 4;Ⅸ= 9;

正常使用时,连写的数字重复不得超过三次。(表盘上的四点钟“IIII”例外)

在一个数的上面画一条横线,表示这个数扩大1000倍

1. 小的在大的前面,则减去, 其它的都相加对应的值

2. I X C即1 10 100才可能减去, V L D 5 50 500只可能是相加

class Solution {
public:
int romanToInt(string s)
{
int sum = 0;
int len = s.length();
int i;
for(i=0;i<len;)
{
switch(s[i])
{
case 'M':
{
sum+=1000;
i++;
break;
}
case 'D':
{

sum+=500;
i++;
break;
}
case 'C':
{
if(i+1<len&&(s[i+1]=='M'||s[i+1]=='D')){sum-=100;i++;break;}
else
{
sum+=100;
i++;
break;
}
}

case 'L':
{

sum+=50;
i++;
break;
}

case 'X':
{
if(i+1<len&&(s[i+1]=='C'||s[i+1]=='L')){sum-=10;i++;break;}
else
{
sum+=10;
i++;
break;
}
}
case 'V':
{

sum+=5;
i++;
break;
}
case 'I':
{
if(i+1<len&&(s[i+1]=='V'||s[i+1]=='X')){sum-=1;i++;break;}
else
{
sum+=1;
i++;
break;
}
}
default:
break;
}
}
return sum;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: