总结
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); } };