思路:这道题跟整数反转的细节处理异曲同工,我们没有用64位int处理,而是取32位int的最大值(最小值)的前n-1位,留下最后一位进行细节处理,拿它跟INT_MAX或者INT_MIN的末尾进行比较,看是否溢出。(这里要强调一下,用一个正数对负数进行取模,得出的结果还是负数!!!比如:-1789%10,得到的答案是-9)
代码:
class Solution {
public:
int myAtoi(string s) {
int idx = 0;
int len = s.size();
while(idx < len && s[idx]==' '){
++idx;
}
if(idx == len) return 0;
int sign = 1;
if(s[idx]=='+'){
++idx;
}else if(s[idx]=='-'){
++idx;
sign = -1;
}
int sum=0;
while(idx<len){
if(s[idx]<'0' || s[idx]>'9') break;
if(sum>INT_MAX/10 || (sum==INT_MAX/10 && (s[idx] - '0') > INT_MAX%10 ) ) return INT_MAX;
if(sum<INT_MIN/10 || (sum==INT_MIN/10 && (s[idx] - '0') > (-(INT_MIN%10))) ) return INT_MIN;
sum = sum*10 + sign*(s[idx] - '0') ;
++idx;
}
return sum;
}
};