8. String to Integer (atoi) 溢出判断

https://leetcode.com/problems/string-to-integer-atoi/

class Solution {
public:
    int myAtoi(string str) {
        if(str.empty()) return 0;
        int sign=1,base=0,i=0;
        
        while(str[i]==' ') i++;
        
        if(str[i]=='+') i++;
        else if(str[i]=='-') sign=-1,i++;
        
        while(i<str.size() && str[i]>='0' && str[i]<='9'){
            if(base>INT_MAX/10 || (base==INT_MAX/10 && (str[i]-'0')>7)){
                return (sign==1)?INT_MAX:INT_MIN;
            }
            base = base*10 + str[i++]-'0';
        }
        
        return sign*base;
    }
};

为什么可以使用如下形式统一处理

if(base>INT_MAX/10 || (base==INT_MAX/10 && (str[i]-'0')>7))

对于INT_MAX情况使用

if(base>INT_MAX/10 || (base==INT_MAX/10 && (str[i]-'0')>6))

或者

if(base>INT_MAX/10 || (base==INT_MAX/10 && (str[i]-'0')>7))

对于INT_MIN情况使用

if(base>INT_MAX/10 || (base==INT_MAX/10 && (str[i]-'0')>7))

或者

if(base>INT_MAX/10 || (base==INT_MAX/10 && (str[i]-'0')>8))

因此可以使用统一形式处理。

原文地址:https://www.cnblogs.com/daijkstra/p/5091842.html