标签:
1 class Solution { 2 public: 3 int myAtoi(string str) { 4 if (str.size() == 0) return 0; 5 int index = 0; 6 // 忽略前导空白 7 while (str.size() > index && str[index] == ‘ ‘) ++ index; 8 int flag = 1; // 可能的符号位 9 if (str.size() > index && str[index] == ‘-‘) { 10 ++ index; flag = -1; 11 } 12 else if (str.size() > index && str[index] == ‘+‘) ++ index; 13 int sum = 0; // 返回值 14 bool overflow = false; // 是否溢出 15 while (str.size() > index && str[index] >= ‘0‘ && str[index] <= ‘9‘) { 16 int prev = sum; 17 sum = sum * 10 + str[index] - ‘0‘; ++ index; 18 // 乘法越界或者加法导致越界,同时注意越界不一定会导致符号的变化,比如乘法越界 19 if (sum / 10 != prev || sum < 0) { overflow = true; break; } 20 } 21 if (flag == 1 && overflow) return INT_MAX; // 22 if (flag == -1 && overflow) return INT_MIN; // 23 return flag * sum; 24 } 25 };
标签:
原文地址:http://www.cnblogs.com/shadowwalker9/p/5751572.html