Leetcode第8题:字符串转换成整数(atoi)
链接:https://leetcode-cn.com/problems/string-to-integer-atoi/
//INT_MAX = 2147483647
//INT_MIN = -2147483648
//INT_MIN和INT_MAX可以在本地IDE输出来: 头文件#include<limits.h>
当整数每一位的值存储在数组中时,可能存在符号位:'+'/'-'。
//设 ans保存之前的正数值 flag = 1为正数 flag = -1为负数 value表示当前位要加的数
//因此若ans > INT_MAX 时 继续计算就一定会溢出 即ans > INT_MAX/10 时溢出
// 若ans = 214748364 即ans == INT_MAX/10
// 则对于正数 当此时加的数value>=7 则会正溢出 即 flag==1 && value=7 正溢出
// 对于负数 当此时加的数value>=8 则会负溢出 即 flag==-1 && value>=8 负溢出
int myAtoi(string str) {
int i = 0;
while(i < str.size() && str[i] == ' '){//去除空格
++i;
}
int flag = 1;
if(str[i] == '-') flag = -1, ++i;
else if(str[i] == '+') flag = 1, ++i;
int ans = 0;
for(; i < str.size() && str[i] >= '0' && str[i] <= '9';++i){
int value = str[i] - '0';
if(ans > INT_MAX / 10) return flag==-1? INT_MIN : INT_MAX;
if(ans == INT_MAX / 10){
if(flag==1 && value >= 7) return INT_MAX;
if(flag==-1 && value >= 8) return INT_MIN;
}
ans = 10 * ans + value;
}
return flag*ans;
}