Int数据溢出的检查 leetcode7
Posted zhang-qi123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Int数据溢出的检查 leetcode7相关的知识,希望对你有一定的参考价值。
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的主要内容,如果未能解决你的问题,请参考以下文章