...
class Solution
{
public:
int reverse(int x)
{
int int_max=2^31-1;
int int_min=-2^31;
int m,n=0;
while(x)
{
m=x%10;
if (n > INT_MAX/10 || (n == INT_MAX / 10 && m > 7)) return 0;
if (n < INT_MIN/10 || (n == INT_MIN / 10 && m < -8)) return 0;
n=10*n+m;
x=x/10;
}
return n;
}
};
题解分析:
(1)模型抽象:本题是将一个整型的数逆序输出,但要求不能定义一个数组,需要顶定义一个整形变量将逆序的结果存储起来,可用的方法技巧是:n=10*n+m
(2)但是如果末尾出现是7时,逆序过来会出现溢出,这时会发生错误的结果,无法存储这一个数据,所以需要每一位每一位的判断,需要如下的方法:
if (n > INT_MAX/10 || (n == INT_MAX / 10 && m > 7)) return 0;
如果输入的整数是一个正数,在每一次整除的时候都要比较最大值/10得出的结果,如果大了停止循环,返回结果0,或者是末尾是大于7的情况,返回结果0
if (n < INT_MIN/10 || (n == INT_MIN / 10 && m < -8)) return 0;
如果输入的整数是一个负数,在每一次整除的时候都要比较最小值/10得出的结果,如果小了停止循环,返回结果0,或者是末尾是大于8的情况,返回结果0
...