leetcode 8 String to Integer (atoi)
2015-10-26 21:51
381 查看
没什么算法可言,但是就是要考虑周全。
1.有可能ans超过long long那么溢出以后正负可能就不对了,所以先判断超过10位的话就直接输出边值。
2.前一部分不符合规定就return 0,有这么几个情况都不行:+-2,- 992(负号和第一个数之前多了个空格,就不行)。但是+5455这种是对的。
3.5545a55这种,a及其后面的都不能算。
1.有可能ans超过long long那么溢出以后正负可能就不对了,所以先判断超过10位的话就直接输出边值。
2.前一部分不符合规定就return 0,有这么几个情况都不行:+-2,- 992(负号和第一个数之前多了个空格,就不行)。但是+5455这种是对的。
3.5545a55这种,a及其后面的都不能算。
class Solution { public: int myAtoi(string str) { int len=str.length(); string st; int fu=2; for(int i=0;i<len;i++){ if(st.length()==0&&(!(str[i]>='0'&&str[i]<='9'))){ if(str[i]==' '&&fu==2){ continue; } else if(str[i]=='-'&&fu==2){ fu=1; } else if(str[i]=='+'&&fu==2){ fu=0; } else return 0; } else if(st.length()>0&&(!(str[i]>='0'&&str[i]<='9'))){ break; } else if(str[i]>='0'&&str[i]<='9'){ st+=str.substr(i,1); } } int ll=st.length(); if(ll==0) return 0; long long int ans=0,shi=1; if(ll>10){ if(fu==1)return -2147483648; else return 2147483647; } for(int i=ll-1;i>=0;i--){ ans+=shi*(st[i]-'0'); shi*=10; } if(fu==1) ans=-ans; if(ans>2147483647) return 2147483647; else if(ans<-2147483648) return -2147483648; else return (int)ans; } };
相关文章推荐
- hdu 4619 Warm up 2(KM)
- 记录——《C Primer Plus (第五版)》第九章编程练习第二题
- aar包无法外部引用(定不了ResId)
- Linux有关文件内容
- hdu 1224 Online dp
- c语言的指针
- 安全参透之旅第2章 Zenmap工具使用第一节
- C++:成员运算符重载函数和友元运算符重载函数的比较
- 从节能的数据中心的硬件和软件设计的角度(一)
- DML语言练习,数据增删改查,复制清空表
- C#实现选择文件夹对话框
- 哈工大数据库课堂记录
- POJ3191- The Moronic Cowmpouter 十进制转负n进制
- windows下安装nodejs及框架express
- 远程连接MYSQL速度慢,解决办法
- 【Unity】NGUI核心组件之UIPanel
- 2015年10月26日作业
- 通知中心
- 设计模式之组合模式
- 《一个陌生女人的来信》观后感