题目描述: 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1: 输入: 123 输出: 321
示例 2: 输入: -123 输出: -321
示例 3: 输入: 120 输出: 21
注意: 假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
方法1: 主要思路: (1)主要难点是处理越界,至于不越界的反转,直接通过求余,乘法更新等,比较简单; (1)为了处理越界,确定对应的数值范围为[-2147483648, 2147483647],则在带判断的数值是10位时,可以通过前九位的数值进行判断: (a)既若前就为的数值已经大于214748364,或者小于-214748364,则肯定越界; (b)若前九位的值为214748364,则在第十位是9时,越界; (c)若前九位的值为-214748364,则第十位是8或9时,越界;
class Solution { public: //对应的范围为[-2147483648, 2147483647] int reverse(int x) { int y = 0; while (x != 0) {//终止情形 //处理越界情形 if (y > 214748364 || y < -214748364||(y== -214748364&&x==9)|| (y== 214748364&&(x==8||x==9))) { return 0; } //正常的逆序转换 y = y * 10 + x % 10; x = x / 10; } return y; } };