第六十三题 模拟第三题
就是要判断 新的数字是否会超过范围
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return int整型
     */
    int StrToInt(string s) {
        int n = s.length();
        int index = 0;
        
        // 去除前导空格
        while(index < n) {
            if (s[index] != ' ')
                break;
            index++;
        }
        // 如果说只有空格 直接return 0
        if(index == n) 
            return 0;
        // 第一个非空字符决定了符号(可能有 也可能没有)
        int sign = 1;
        if(s[index] == '+')
            index++;
        else if(s[index] == '-') {
            sign = -1;
            index++;
        }
        
        // 结果
        int res = 0;
        while(index < n){
            // c记录了当前的字符
            char c = s[index];
            // 如果不是数字 直接退出循环
            if(c < '0' || c > '9')
                break;
            
            //int型超过了范围
            // 第一种情况 *10 超出了范围
            // 第二种情况 *10 没超出范围,就看最后一位是否符合要求
            if(res > INT_MAX / 10 || (res == INT_MAX / 10 && (c - '0') > INT_MAX % 10))
                return INT_MAX;
            if(res < INT_MIN / 10 || (res == INT_MIN / 10 && (c- '0') > -(INT_MIN % 10)))
                return INT_MIN;
            res = res * 10 + sign * (c - '0');
            index++;
        }
        return res;
    }
};