前言
不存储大于32位的前提下,实现32位有符号整数反转。
一、题目
1、内容
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
2、示例
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
示例 4:
输入:x = 0
输出:0
二、题解
package com.xhu.offer.tencent;
import java.util.HashMap;
/**
* 7.整数反转
*
* @author lls
*/
public class Reverse {
public int reverse(int x) {
//返回结果,初始化为0
int res = 0;
//记录传入参数是否为负数
boolean mark = x < 0;
//如果是minValue,直接为0,然后返回res = 0;
x = mark ? -x : x;
//计算机不能存超过maxValue的值,所以设置阈值来提前判断求得的数据是否会超过32位。
int threshold = Integer.MAX_VALUE / 10;
while (x != 0) {
int mod = x % 10;
if (res > threshold) return 0;
if (Integer.MAX_VALUE - res * 10 < mod) return 0;
res = res * 10 + mod;
x /= 10;
}
return mark ? -res : res;
}
public static void main(String[] args) {
System.out.println(Integer.MIN_VALUE);
System.out.println(Integer.MAX_VALUE);
//取余本质,m % n = m - (int)(m / n) * n,负数也遵循这个规则。
System.out.println(-10 % -4);
}
}