第六十三题 模拟第三题
就是要判断 新的数字是否会超过范围
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;
}
};