给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
int reverse(int x) {
long p,i=0;
while(x)
{
p=x%10;
i = 10*i + p;
x=x/10;
}
if(i < INT_MIN || i > INT_MAX)//C/C++中的INT_MIN和INT_MAX,java中是Integer.MIN_VALUE和 Integer.MAX_VALUE
return 0;
return i;
}
INT_MIN:
INT_MIN在标准头文件limits.h中定义。
-
#define INT_MAX 2147483647
-
#define INT_MIN (-INT_MAX - 1)
在C/C++语言中,不能够直接使用-2147483648来代替最小负数,因为这不是一个数字,而是一个表达式。表达式的意思是对整数21473648取负,但是2147483648已经溢出了int的上限,所以定义为(-INT_MAX -1)。
C中int类型是32位的,范围是-2147483648到2147483647 。 为 [−2^31, 2^31 − 1]
(1)最轻微的上溢是INT_MAX + 1 :结果是 INT_MIN;
(2)最严重的上溢是INT_MAX + INT_MAX :结果是-2;
(3)最轻微的下溢是INT_MIN - 1:结果是是INT_MAX;
(4)最严重的下溢是INT_MIN + INT_MIN:结果是0 。
如果在eclipse上运行,就这样:
public class ReverseInt {
public int reverse(int x) {
int rev = 0;
while (x != 0) {
int pop = x % 10;
x /= 10;
if (rev > Integer.MAX_VALUE / 10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) {
return 0;
}
if (rev < Integer.MIN_VALUE / 10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) {
return 0;
}
rev = rev * 10 + pop;
}
return rev;
}
public static void main(String[] args) {
int x = -321;
ReverseInt reverseInt = new ReverseInt();
System.out.println(reverseInt.reverse(x));
}
}
把leetcode网站上的写成一个class,在main函数里直接调用。