Leetcode atoi
总结
1. int 的问题上升到 long long 以减少判断
2. longlong int BIG_INT 不能通过 10 * INT_MAX 获得, 必须手动指定
int conversion(const char *substr, bool neg) {
int len = strlen(substr);
long long int sum = 0;
long long int BIG_MAX = 22222222222;
int i;
for(i = 0; i < len && sum <= BIG_MAX; i ++) {
if(substr[i] >= '0' && substr[i] <= '9') {
sum = sum * 10 + substr[i] - '0';
} else {
break;
}
}
if(neg) {
if(-1*sum <= INT_MIN) {
return INT_MIN;
}
return int(-1*sum);
}
if(sum >= INT_MAX) {
return INT_MAX;
}
return sum;
}
class Solution {
public:
int atoi(const char *str) {
bool neg = false;
int len = strlen(str);
int i;
for(i = 0; i < len; i ++) {
if(str[i] >= '0' && str[i] <= '9') {
break;
}
if(str[i] == '+' || str[i] == '-') {
if(str[i] == '-')
neg = true;
i ++;
break;
}
if(str[i] == ' ') continue;
else {
return 0;
}
}
if(i >= len) return 0;
if(!(str[i] <= '9' && str[i] >= '0')) return 0;
return conversion(str+i, neg);
}
};

浙公网安备 33010602011771号