class Solution {
public:
int myAtoi(string str) {
if(str.empty()) return 0;
int sign = 1,base = 0,i=0,n = str.size();
while(i<n && str[i]==' ')++i;
if(str[i]=='+'||str[i]=='-'){
sign = (str[i++]=="+")?1;-1;
}
while(i<n && str[i]>='0'&&str[i]<='9')
{
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'>7))
// 关于这个判定条件的注释,
// 因为base每次增长的方式是10的倍数+一个个位数,所以如果base如果大于INT_MAX/10会溢出,
// 如果base=INT_MAX/10时,取决于个位数,因为INT_MAX=2147483647,所以如果str的最后位数一定要小于7,
// 否则就会溢出.
{
return (sign==1) ?INT_MAX;INT_MIN;
}
base = 10*base+(str[i++]-'0');
}
return base *sign;
}
};
直接贴代码,因为对这边界判断条件理解,特此记录.