您的位置:首页 > 其它

leetcode 每日一题 13. Roman to Integer

2016-03-13 14:59 316 查看
将罗马数字转换成int,首先要知道罗马数字的规则,有一篇文章写得很好,我看了之后理解了···所以编了程序1a了

原文在此: http://www.ituring.com.cn/article/179820?utm_source=tuicool
基本字符:   I、V、X、L、C、D、M

相应的阿拉伯数字表示为:

1.5、10、50、100、500、1000

(1)相同的数字连写,所表示的数等于这些数字相加得到的数,如:Ⅲ = 3;

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

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

思路如下

从左边第一个数字开始,依次加,因为有(3)的情况的存在, 加过以后判断,要是存在(3)的情况,就减去前一个(i-1)*2,因为本来应该减去前面这个小的数, 但是上次一循环还加了一次,于是这次就减去2次。

代码如下,要注意switch的写法:

class Solution {
public:
int chartoval(char c){
int val;
switch(c){
case'I': val=1;break;
case'V': val=5;break;
case'X': val=10;break;
case'L': val=50;break;
case'C': val=100;break;
case'D': val=500;break;
case'M': val=1000;break;
}
return val;
}
int romanToInt(string s) {
int sum=chartoval(s[0]);
for(int i=1;i<s.length();i++){
if(chartoval(s[i])<=chartoval(s[i-1])){
sum+=chartoval(s[i]);
}
else{
sum+=chartoval(s[i]);
sum-=2*chartoval(s[i-1]);
}

}
return sum;
}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: