Reverse digits of an integer.
Example1: x = 123, return 321
Example1: x = 123, return 321
Example2: x = -123, return -321
一开始没考虑溢出情况:
int reverse(int x) {
long sum=0;
while(x){
sum*=10;
sum+=x%10;
x=x/10;}
return sum;
}
提交后报错,很明显就是WA,考虑溢出情况:reverse之后如果上溢,返回最大值INT_MAX; 如果是下溢,返回最小值INT_MIN。这里没有简单地将INT_MIN赋值成-2147483648,是因为-2147483648对于编译器而言是个表达式,而2147483648对于32-bit整数是无法表示的,所以经过这个表达式的结果是未定义的。在GCC上直接写-2147483648后,编译器给出了警告,说结果是unsigned。类似的有INT_MAX。
int reverse(int x) {
if(x==INT_MIN)return 0;//实际上int型的x只可能x==INT_MIN
long sum=0;
bool flag=1;
if(x<0) {flag=0;x=x*(-1);}
int intf=INT_MAX/10;
while(x){
if(sum>intf){return 0;}
else{
sum*=10;
sum+=x%10;
x=x/10;}}
if(flag==1)return sum;
else return sum*(-1);
}