1. 二刷想法
好久没有复习之前刷的一些题目了,这次打开了这个题目,结果发现自己只有基本的思路,但是细节上面完全实现不出来了.
温故而知新,可以为师矣
学而不思则罔,思而不学则殆
2. 解题思路
溢出提示:这道题明确说明了范围在[
−
2
31
,
2
31
−
1
-2^{31},2^{31}-1
−231,231−1]之中,如果没有注意到这一点的话,会造成程序的溢出.
算法思考:x是一个数字,以321为例.
x = x % 10 得到 x = 1
x = x / 10 得到 x = 32
所以 % 可以用获取每次个位的值, / 可以用来获取下一次个位的值
每次结果等于 上一次个位值 * 10 + 新的个位置
这样就达到了我们的目的.
3. 问题的解
int reverse(int x)
{
long resul = 0 ;
// 如果x的值不符合题设要求,那么直接返回 0
if(!(-2147483648< x <2147483647)) return 0;
while(x != 0)
{
// 正如上文所说 上次的值 * 10 + 新的个位
result = result * 10 + x % 10;
x = x / 10;
}
if(-2147483648 > result || result > 2147483647)
{
return 0;
}
else return result;
}