感觉 CSDN 要凉了啊,还有谁在这玩意上写博客吗。。。
在32位环境下判断是否溢出,这是这题最大的收获了把。
# define INT_MIN (-INT_MAX - 1)
# define INT_MAX 2147483647
// 判断绝对值
if (sum > INT_MAX / 10 || (sum == INT_MAX / 10 && str[i] - '0' > 7))
{
if (subflg == 1) // 是否是负数
return INT_MIN;
else
return INT_MAX;
}
附上源码
class Solution {
public:
int myAtoi(const string &str) {
int num = 0;
int sign = 1;
const int n = str.length();
int i = 0;
while (str[i] == ' ' && i < n) i++;
if (str[i] == '+') {
i++;
} else if (str[i] == '-') {
sign = -1;
i++;
}
for (; i < n; i++) {
if (str[i] < '0' || str[i] > '9')
break;
if (num > INT_MAX / 10 ||
(num == INT_MAX / 10 &&
(str[i] - '0') > INT_MAX % 10)) {
return sign == -1 ? INT_MIN : INT_MAX;
}
num = num * 10 + str[i] - '0';
}
return num * sign;
}
};