码迷,mamicode.com
首页 > 其他好文 > 详细

Int数据溢出的检查 leetcode7

时间:2020-02-14 11:15:22      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:正数   数字   return   反转   dash   符号   sans   数值   min   

Int数据溢出的检查 leetcode7

一、题目:

7. 整数反转

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123 输出: 321

示例 2:

输入: -123 输出: -321

示例 3:

输入: 120 输出: 21

注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

二、解答:

方法:

  • 需要知道int型数据的范围——int类型是32位的,范围是-2147483648到2147483647

  • 溢出发生在求 num=num*10+item; 时,如果此时num*10+item的值已经超出范围,此时再赋给num就会发生溢出,因此我们需要在完成赋值前,对赋值是否会发生溢出做一个预先的判断

  • 溢出的判断条件:

    • 当num为正数时

    • 如果num>Integer.MAX_VAlUE/10的话,肯定是会溢出

    • 如果num==Integer.MAX_VALUE/10并且item>7(参考最大值2147483647)的情况下会溢出

      当num为负数时反过来即可

 

Java代码:

class Solution {

  public int reverse(int x) {

?    int num=0;

?    int item;

?    while(x!=0){

?      item=x%10;

?      x=x/10;

?      //当x为正数的溢出情况

?      if(num>Integer.MAX_VALUE/10||(num==Integer.MAX_VALUE/10&&item>7))

?      return 0;

?      if(num<Integer.MIN_VALUE/10||(num==Integer.MIN_VALUE/10&&item<-8))

?      return 0;

?      num=num*10+item;      

?    }



?    return num;

  }

}

 

Int数据溢出的检查 leetcode7

标签:正数   数字   return   反转   dash   符号   sans   数值   min   

原文地址:https://www.cnblogs.com/zhang-qi123/p/12306428.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!