栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【力扣题解】Java判断输入整数是否发生溢出

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【力扣题解】Java判断输入整数是否发生溢出

背景

这篇帖子的背景是8. 字符串转换整数 (atoi)

在这道题中需要重写atoi,便需要考虑到整数发生溢出的情况

判断输入整数是否发生溢出

我们知道,整数的范围是 [-2^31, 2^31 - 1],也就是 [-2147483648, 2147483647]

在这道题中,我们使用sign来判断数值的符号,value来记录数值的值,所以value为非负数

因此,我们只需要根据214748364进行讨论

// 根据ASCI得到该位置的数字
int num = c - '0';
// 判断是否会发生溢出
if(value == 214748364){

    // 正数超过2147483647会发生溢出
    if(num > 6 && (sign == 1 || sign == 0)){
        return Integer.MAX_VALUE;
    }

    // 负数小于-2147483648会发生溢出
    else if(num > 7 && sign == -1){
        return Integer.MIN_VALUE;
    }
}
   
                 
// 值将大于等于2147483650,必发生溢出                  
else if(value > 214748364){
    return (sign == 1 || sign == 0)?Integer.MAX_VALUE:Integer.MIN_VALUE;
}

 

下面附上这道题的整体思路和全部代码 整体思路

遍历字符串,根据不同的情况处理输出结果,处理数据。采用ASCI将输入的字符转换成数字,根据214748364的比较来判断是否发生溢出。

 

代码
class Solution {
    public int myAtoi(String s) {
        // 输入字符的长度
        int l = s.length();
        // 已经得到的数字位数
        int digit = 0;
        if(l == 0){
            return 0;
        }
        else{
            // 用于判断正负以及是否已经遍历'-'和'+'
            int sign = 0;
            // 目前得到的数字值
            int value = 0;
            for(int i = 0; i < l; i++){
                // 获得在该位的字符
                char c = s.charAt(i);
                // 如果这个字符可以转换为数字
                if(Character.isDigit(c)){
                    // 根据ASCI得到该位置的数字
                    int num = c - '0';
                    // 判断是否会发生溢出
                    if(value == 214748364){
                        // 正数超过2147483647会发生溢出
                        if(num > 6 && (sign == 1 || sign == 0)){
                            return Integer.MAX_VALUE;
                        }
                        // 负数小于-2147483648会发生溢出
                        else if(num > 7 && sign == -1){
                            return Integer.MIN_VALUE;
                        }
                    }
                    // 值将大于等于2147483650,必发生溢出
                    else if(value > 214748364){
                        return (sign == 1 || sign == 0) Integer.MAX_VALUE:Integer.MIN_VALUE;
                    }
                    // 更新value和digit
                    value = value*10 + num;
                    digit ++;
                }
                // 输出结果为负数
                else if(c == '-' && sign == 0 && digit == 0){
                    sign = -1;
                }
                // 输出结果为正数
                else if(c == '+' && sign == 0){
                    sign = 1;
                }
                // 前置空格
                else if(c == ' ' && digit == 0 && sign == 0){
                    continue;
                }
                // 在数字中出现了空格
                else if(c == ' ' && digit != 0){
                    break;
                }
                // 在正号后出现了空格
                else if(c == ' ' && sign == 1){
                    break;
                }
                // 其他情况下出现了空格
                else if(c != ' '){
                    break;
                }
            }
            // 输出正数
            if(sign == 0 || sign == 1){
                return value;
            }
            // 输出非正数
            else{
                return sign*value;
            }
        }
}

}

 

有什么问题也欢迎在评论区讨论
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/937020.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号