具体思路:
注意下溢出问题,如果偷懒使用正整数进行溢出判断,会忽略INT_MIN的绝对值比INT_MAX小这一情况;
具体代码:
class Solution {
public:
int fun(string s,bool flag){
int ret=0;
for(int i=0;i<s.size();i++){
if(flag&&(ret>INT_MAX/10||ret*10>=INT_MAX-(s[i]-'0'))||!flag&&(ret>INT_MAX/10||ret*10-1>=INT_MAX-(s[i]-'0'))){
if(flag)
return INT_MAX;
else
return INT_MIN;
}
ret=(s[i]-'0')+ret*10;
}
if(flag)
return ret;
else
return -ret;
}
int myAtoi(string s) {
int start=0;
int end=0;
int index=0;
bool flag=true;
string num="";
while(s[index]==' ')
index++;
if(s[index]=='+'||s[index]=='-'){
if(s[index]=='-')
flag=false;
index++;
}
if(!(s[index]<='9'&&s[index]>='0'))
return 0;
while(s[index]<='9'&&s[index]>='0'){
num.push_back(s[index++]);
}
return fun(num,flag);
}
};