/*
方法一:long long,不需要考虑溢出
方法二:int,需要考虑溢出
*/
class Solution {
public:
int myAtoi(string str) {
int k = 0;
//去除多余的空格
while(k < str.size() && str[k] == ' ') k ++;
//如果字符串为空,直接返回0
if(k == str.size()) return 0;
int minus = 1;
if(str[k] == '-') minus = -1, k ++;
else if(str[k] == '+') k ++;
long long res = 0;
while(k < str.size() && str[k] >= '0' && str[k] <= '9'){
res = res * 10 + str[k] - '0';
k ++;
if(res > INT_MAX) break;
}
res *= minus;
if(res > INT_MAX) res = INT_MAX;
else if(res < INT_MIN) res = INT_MIN;
return res;
}
};
class Solution {
public:
int myAtoi(string str) {
int k = 0;
while(k < str.size() && str[k] == ' ') k ++;
if(k == str.size()) return 0;
int minus = 1;
if(str[k] == '-') minus = -1, k ++;
else if(str[k] == '+') k ++;
int res = 0;
while(k < str.size() && str[k] >= '0' && str[k] <= '9'){
int x = str[k] - '0';
if(minus > 0 && res > (INT_MAX - x) / 10) return INT_MAX;
if(minus < 0 && -res < (INT_MIN + x) / 10) return INT_MIN;
if(-res * 10 - x == INT_MIN) return INT_MIN;
res = res * 10 + x;
k ++;
}
res *= minus;
if(res > INT_MAX) res = INT_MAX;
else if(res < INT_MIN) res = INT_MIN;
return res;
}
};