今天分享一道非常经典的面试题
题目来源
解题方法
class Solution {
public:
int strToInt(string str) {
int i=0;
while(str[i] == ' ')
i++;
int flag=1;//记录符号位
int ans = 0;
if(str[i] == '-'){
flag=-1;
}
if(str[i] == '-' || str[i] == '+')
i++;
while(i<str.size() && isdigit(str[i])){
int r = str[i] - '0';
if(ans > INT_MAX/10 || (ans == INT_MAX /10 && r > 7)){
cout << ans << endl;
return flag==1 ? INT_MAX : INT_MIN;
}
ans = ans * 10 + r;
i++;
}
return ans*flag;
}
};
非常巧妙的地方在于判断溢出那边,我们无法判断一个已经溢出的值是否溢出,但是我们可以判断比他小一轮的数是否有溢出的迹象
if(ans > INT_MAX/10 || (ans == INT_MAX /10 && r > 7)){
cout << ans << endl;
return flag==1 ? INT_MAX : INT_MIN;
}
真是巧妙啊