反向整数(java实现)

一、题目
给定一个带符号的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();//关闭输入流
	}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值