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

  

原文地址:https://www.cnblogs.com/zhouzhuo/p/3681847.html