问题描述:
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
Note:
The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.
中文大意:
反转数字。注意:超出范围则返回0。
解题思路:
普通解法,略。
代码:
package LeetCode;
import java.util.Scanner;
public class L007_Reverse_Integer {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int x = in.nextInt();
L007_Reverse_Integer rt = new L007_Reverse_Integer();
System.out.println(rt.reverse(x));
}
public int reverse(int x){
if(x>Integer.MAX_VALUE)
return 0;
boolean flag = true;//是否为正数,true:是正数
if(x<0){
x = Math.abs(x);
flag = false;
}
int rx=0;
System.out.println(Integer.MAX_VALUE);
while(x>0){
//下面这个判断放在此处,而不是在30行rx计算完毕后判断rx>Integer.MAX_VALUE
//是因为rx超出也不会大于等于Interger.MAX_VALUE
//所以要在加之前,进行巧妙变换地判断
//判断上一次加的数,是否大于最大值减去即将要加的数,即可判断这一次加之后会不会超过最大值
if(rx>(Integer.MAX_VALUE - x % 10) / 10)//rx*10+x%10>Integer.MAX_VALUE
return 0;
rx = rx*10 + x%10;
//if(rx>Integer.MAX_VALUE)//输入1534236469时不通过
// return 0;
x /=10;
}
if(flag)
return rx;
else return -rx;
}
}