数字转换必须使用大于或小于

转换数字时,判断溢出必须使用小于或者大于,不能使用小于等于或者大于等于,以力扣第8题为例

int myAtoi(string s) {
        int i = 0;
        while(s[i] == ' ') i++;
        bool flag = false;
        if(s[i] == '+' || s[i] == '-')
        {
            if(s[i] == '-') flag = true;
            i++;
        }
        int ans = 0;
        for(; s[i] >= '0' && s[i] <= '9'; i++)
        {
            int val = s[i] - '0';
            if(flag) val = -val;
            if(!flag && ans > (INT_MAX - val) / 10) return INT_MAX;
            if( flag && ans < (INT_MIN - val) / 10) return INT_MIN;
            ans = ans * 10 + val;
        }
        return ans;
    }

如果if(!flag && ans > (INT_MAX - val) / 10) return INT_MAX;

改为if(!flag && ans >= (INT_MAX - val) / 10) return INT_MAX;

显然INT_MAX = 2147483647

s = 2147483641时,
走到最后一步,ans = 214748364, val = 1
此时显然ans == (INT_MAX - val) / 10
从而返回错误答案,
必须使用大于才能纠正错误

posted @ 2022-11-07 15:09  INnoVation-V2  阅读(36)  评论(0)    收藏  举报