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的写法:
原文在此: 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; } };
相关文章推荐
- 一些很有用的技术工具
- 关于HTML5的学习笔记1
- poj1328 Radar Installation
- 设计模式—策略模式
- ViewPager实现引导页
- 文章标题
- vxWorks SPI Flash TFFS实现
- JavaScript创建变量语法
- Java复习(3)-内部类
- 我的c++程序
- css学习任务一:绘制九宫格
- Ajax——响应内容为xml
- java程序设计基础_陈国君版第五版_第九章例题
- 【实战】后台执行的定时任务
- Javascript中的function函数
- C ++中的—>和 . 的区别
- [算法]最大子段和问题
- 外联css及js的使用
- RecyclerView一个奇怪的npe异常
- CSS3详解:transform