一、题目
给定一个带符号的32位整数x,返回x并将其数字颠倒。如果x的反转导致值超出带符号的32位整数范围[- 2^31 , 2^31 - 1],则返回0。
假设环境不允许存储64位整数(有符号或无符号)。
示例:
输入:x = 0
输出:0
输入:1234567809
输出:0
约束:2^31 <= x <=2^31 - 1
二、解题思路
由题目要求- 2^31 <= x <=2^31 - 1并且在java中有int的包装类Integer,内包含MAX_VALUE表示int 类型的最大值为 2^31-1, MIN_VALUE表示int 类型的最小值为 -2^31
所以MIN_VALUE=<x<=MAX_VALUE,
但是x的取反有时候会超出范围,比如x=1234567809,此时需要输出0;
如何解决这一问题:
首先,我们必须知道如何得到x的反向整数:
int s=0;
int j = x % 10;//取得个位数
x /= 10;//降位
s = s * 10 + j;
s增一位,x减一位;
对s大小的使用Integer.MIN_VALUE / 10以及Integer.MAX_VALUE / 10判断
三、完整代码
import java.util.*;
import java.lang.*;
class Solution {
public int reverse(int x) {
int s = 0;
while (x != 0) {
if (s < Integer.MIN_VALUE / 10 || s > Integer.MAX_VALUE / 10) {
return 0;
}
int j = x % 10;//取得个位数
x /= 10;//降位
s = s * 10 + j;
}
return s;//返回反向整数
}
}
public class Test
{
public static void main(String[] args) {
Solution a=new Solution();
int n ;
Scanner s = new Scanner(System.in);
System.out.print("输入:");
n= s.nextInt();
System.out.println("输出:"+a.reverse(n));
s.close();//关闭输入流
}