前提:
C中常量INT_MAX和INT_MIN分别代表最大、最小整数,定义在头文件limits.h中。
因为int占4字节32位,根据二进制编码的规则,INT_MAX = 2^31-1,INT_MIN= -2^31.
2^31-1=2147483647,-2^31=-2147483648
INT_MAX + 1 = INT_MIN
INT_MIN - 1 = INT_MAX
C/C++中,超过该限值的数,都会出现溢出但不会出现错误。如果表示的整数超过上面的限值,可以使用长整型long long 占8字节64位。
题目:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
long int reverse(long int x) {
long int sum1=0;
if(x>=0){
while(x!=0){
long int sum2=x%10;
x/=10;
if(sum1>INT_MAX/10||(sum1==INT_MAX/10&&sum2>7))return 0;
sum1=sum1*10+sum2;
}
}else {
while(x!=0){
long int sum2=x%10;
x/=10;
if(sum1<INT_MIN/10||(sum1==INT_MIN/10&&sum2<-8))return 0;
sum1=sum1*10+sum2;
}
}
return sum1;
}