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))
因此可以使用统一形式处理。