roman to integer
2013-12-27 01:52
393 查看
问题:将给定的罗马字符串转换为整数。
花了一晚上的时间,写出如此代码,真真说不过去了,烂的一塌糊涂。
class Solution { public: int romanToInt(string s) { if(s.size() == 0) return 0; int re = 0; //index 表示当前应该处理的元素。 int index = 0; int len = s.size(); //处理跟M有关的数 int thousand = s.find_first_of('M'); if (-1 != thousand ){//find if( thousand == 0){//it's "M****" //处理连续M,连续则累加。 while(index < len && s[index] == 'M'){ re += 1000; ++index; } //出现不连续的M,则是900. thousand = s.find_last_of('M'); if (thousand > index){ re += 900; index = thousand + 1; } if(index == len) return re; } else{//M没在第一位,则表示的数是介于[900,1000) re += 900; index = thousand + 1; } } //处理跟D有关的数,[400,900) int five_hun = s.find_first_of('D'); if ( -1 != five_hun){ if(five_hun == index){// >= 500 re += 500; index++; } else{// it must be "CD" re += 400; index = five_hun + 1; } } //处理跟C有关的数[90, ) int hun = s.find_first_of('C'); if (hun >= index){ if (hun == index){ //C前面没有X,[100, ) while (index < len && s[index] == 'C'){ re += 100; ++index; } hun = s.find_last_of('C'); if (hun > index){ re += 90; index = hun + 1; } if(index == len) return re; } else{//it must be "XC" re += 90; index = hun + 1; } } //handle 'L' int five_ten = s.find_first_of('L'); if (five_ten >= index){ if (five_ten == index){//"V***" re += 50; index++; if(index == len) return re; } else{//"XV" re += 40; index = five_ten + 1; } } //handle the X int ten = s.find_first_of('X'); if (ten >= index){ if (ten == index && s[index + 1] == 'C'){ re += 90; index += 2; } else if (ten == index){ while (index < len && s[index] == 'X'){ re += 10; ++index; } ten = s.find_last_of('X');//"IX" if (ten > index){ re += 9; index = ten + 1; } if(index == len) return re; } else { re += 9; index = ten + 1; } } //handle 'V' int five = s.find_first_of('V'); if (five >= index){ if(five == index){ re += 5; index++; } else{ re += 4; index = five + 1; } } int ge = s.find_first_of('I'); if(index > len - 1) return re; if(ge < len - 1 && s[ge + 1] == 'X') { re += 9; return re; } while (ge != -1 && ge <= len - 1) { re += 1; ge++; } return re; } };
花了一晚上的时间,写出如此代码,真真说不过去了,烂的一塌糊涂。
相关文章推荐
- 进程同步之信号量机制(pv操作)及三个经典同步问题
- Power BI的一些视频演示资源
- 张小龙演讲精华:产品经理的方法论与价值观
- Quotient Polynomial
- Power BI的一些视频演示资源
- kernel网址
- 跨越13开启14--猿猿感想
- ViewPager和ScrollView滑动冲突
- 黑马程序员_String类
- 用户访谈过程中遇到的几个失控经历
- Uni2D 入门 -- Atlas
- 黑马程序员--面向对象(二)static关键字、静态代码块、对象的初始化过程
- 公众号我也快看不下去了!
- Java 第六天 Spring Annotation 和其它
- 2013全国互联互通工作盘点,互联带宽扩容668G
- 我为何停止使用Spring
- Linux 的 /tmp 目錄變成 1MB 的 overflow 檔案系統如何解決
- 黑马程序员--面向对象(一)封装、成员变量与局部变量、匿名对象、构造函数、this关键字
- 输出进制数
- Cocos2d-x 火焰例子效果