Leetcode第8题:字符串转换成整数(atoi)整数越界判断

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;

    }

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容