7.整数反转

题目:

给定一个 32 位有符号整数,将整数中的数字进行反转。

示例 1:

输入: 123
输出: 321

 示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

思路:

思路很简单,首先考虑最简单的正数,每次除以10取余得到最低位的数字,然后低位乘以10加上高位。

对于负数,先取相反数,按照正数的算法求得后再取相反数。

本题唯一需要注意的是:由于给定的输入和返回值都是int型,需要考虑int最大值,避免出现溢出而计算错误。采用方法是判断每次计算结果是否大于Integer.MAX_VALUE.

代码:

    public static int reverse(int x) {
    	int sum = 0;
    	int temp = 0;
    	boolean flag = true;
    	if(x<0) {
    		x = -1*x;
    		flag = false;
    	}
        while(x>0) {
        	temp = x % 10;
        	x = x / 10;
        	if(sum > Integer.MAX_VALUE/10) {
        		return 0;
        	}
        	sum = sum * 10 + temp;
        }
        return flag?sum:sum*-1;
    }

注:判断是否溢出使用sum > Integer.MAX_VALUE/10,而不能使用sum * 10 > Integer.MAX_VALUE,因为sum为int型,sum * 10求得结果仍为int型,若sum * 10 > Integer.MAX_VALUE,则sum * 10已经发生了溢出,计算结果已经出错了。也可将sum设为long型变量,这样就不会发生溢出,计算结果仍是正确的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章