题目大意是实现自己的atoi函数,即将将字符串中的数字转换为int型,如果不能转换则将其转换为0,若超过整形范围。则以最大值或最小值保存。代码如下,运行时间12ms.ret保存的是结果,sign标记第一个字符是+或-,代码首先将i定位到第一个不是空格的位置,base保存了INT_MAX/10的结果,若ret>base了,则ret10必定大于INT_MAX,若ret=base,而INT_MAX-ret10 =7,则说明当前的字符不能大于7,否则就超过了最大整数.。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| int myAtoi(string str) { int ret = 0, sign = 1; i = str.find_first_not_of(' '), base = INT_MAX / 10; if (str[i] == '+' || str[i] == '-') sign = str[i++] == '+' ?: -1; while (isdigit(str[i])) { if (ret > base || (ret == base && str[i] - '0' > 7)) return sign > 0 ? INT_MAX : INT_MIN; ret = 10 * ret + (str[i++] - '0'); } return sign * ret; }
|