假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−2^31, 2^31 − 1]。如果数值超过这个范围,请返回 INT_MAX (2^31 − 1) 或 INT_MIN (−2^31) 。
class Solution {
public:
//o(n)
//测试:
//正数的情况;正常,溢出
//负数的情况;正常,溢出
//有其他字符的情况
int myAtoi(string s) {
int res =0;
int i=0;
int flag = 1;
//处理空格
while(s[i] == ' ') { i++; }
//处理正负号
if(s[i] == '-') flag = -1 ;
if(s[i] == '+' || s[i] == '-') i++;
//
while(i<s.size() && isdigit(s[i])){
int r = s[i] - '0';
//处理溢出
//res==INT_MAX==214748364,其中,(res == INT_MAX / 10) && x > 7)值是-2147483648
//7表示判断最后一位,当x>7时,若为正值,必溢出,若为负值,一定取到最大值或溢出,直接返回
if(res>INT_MAX/10 || (res == INT_MAX/10 && r>7)){
return flag >0 ? INT_MAX : INT_MIN;
}
//推入
res = res*10 + r;
i++;
}
//根据正负号返回最终结果
return flag>0 ? res:-res;
}
};