Leetcode第8題:字符串轉(zhuǎn)換成整數(shù)(atoi)整數(shù)越界判斷

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;

    }

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容