C++实现
学到的东西:
- INT_MAX INT_MIN 分别代表int型的最大值和最小值
- 判断溢出:
if ( (unsigned)a + (unsigned)b > INT_MAX)
溢出;
#define INT_MAX 2147483647
#define INT_MIN (-2147483647 - 1)
class Solution {
public:
int atoi(const char *str) {
if (!str)
return 0;
int result = 0;
while (*str == '0' || *str == ' ')
str++;
//negative为1代表整数,-1代表负数
int negative = 1;
if (*str == '-'){
negative = -1;
str++;
}
else if (*str == '+')
{
str++;
}
//用来判断是否溢出
long long temp;
while (*str != '\0'){
if (*str > '9' || *str < '0' )
break;
temp = result;
if (temp * (unsigned int)10 > INT_MAX || temp * 10 + (*str - '0') > INT_MAX) {
if (negative == 1)
return INT_MAX;
else
return INT_MIN;
}
result = result * 10 + (*str - '0');
str++;
}
return negative * result;
}
};