Leetcode第8題:字符串轉(zhuǎn)換成整數(shù)(atoi)
鏈接:https://leetcode-cn.com/problems/string-to-integer-atoi/
//INT_MAX = 2147483647
//INT_MIN = -2147483648
//INT_MIN和INT_MAX可以在本地IDE輸出來: 頭文件#include<limits.h>
當整數(shù)每一位的值存儲在數(shù)組中時,可能存在符號位:'+'/'-'。
//設(shè) ans保存之前的正數(shù)值 flag = 1為正數(shù) flag = -1為負數(shù) value表示當前位要加的數(shù)
//因此若ans > INT_MAX 時 繼續(xù)計算就一定會溢出 即ans > INT_MAX/10 時溢出
// 若ans = 214748364 即ans == INT_MAX/10
// 則對于正數(shù) 當此時加的數(shù)value>=7 則會正溢出 即 flag==1 && value=7 正溢出
// 對于負數(shù) 當此時加的數(shù)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;
}