问题描述:
给定一个 32 位有符号整数,将整数中的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。
-
问题分析:
拿到这个问题时,思考一下,我们要对一个有符号的数字进行反转,我们要考虑的是我们处理的数字是有正负之分的,所以分析问题的时候不能遗漏了负数的情况。 -
那好,到这里,我们假设现在有一个数字:123,我们要反转,那么是不是要把这个数字的各个位上的数字分别拿出来。对于拿出一个数字的各个位上的数,我们要记住一个经典的处理方式:
-
第一步:int a1 = x%10 拿出x的余数。
第二步: x = (x-a1)/10 去掉最后一位
重复上两步,就能把x 的各个位上的数值取出。 -
然后,我们考虑,此时我们已经可以拿出各个位上的数值了,那怎样把拿出来的单个数值合并为一个完整的数呢?这一步其实相对容易:算法就是将取出的数乘以相应的10的次方再相加就行。
-
最后我们考虑一下,如果超出范围了,返回0即可。具体代码如下图所示:
- 其实上述代码有些细节还是很有必要说明一下的。比如我们如何求一个数有几位呢?这里的技巧是将整数后面加上“”,这样整数就被转成字符串了,对于字符串我们可以用length();方法求得长度(码代码的时候记住length后面有括号)。