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


    转换数字时,判断溢出必须使用小于或者大于,不能使用小于等于或者大于等于,以力扣第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
    从而返回错误答案,
    必须使用大于才能纠正错误

  • 相关阅读:
    class7-附
    class6-附
    class6
    class5-附
    class4-附
    class4
    class3-附【家庭资产配置】
    class2
    芒果绿的blog
    java网络爬虫基础学习(四)
  • 原文地址:https://www.cnblogs.com/INnoVationv2/p/16866059.html
Copyright © 2020-2023  润新知