小白刷题——整数反转

JAVA小白自学中

整数反转

题目

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2……31, 2……31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

标题示例

示例 1:

输入: 123
输出: 321
示例 2:

输入: -123
输出: -321
示例 3:

输入: 120
输出: 21

代码

class Solution {
    public int reverse(int x) {
        long a, b, c, d;
        b = 0;
        c = 1;
        d = 2147483648L;
        if (x == -2147483648) {
            return 0;
        }
        if (x < 0) {
            x = -x;
            c = -1;
        }
        for (long i = x; i != 0; i = i / 10) {
            a = i % 10;
            if (i < 10) {
                b = b + a;
            } else {
                b = (a + b) * 10;
            }

            if (b > d) {
                b = 0;
                break;
            }
        }
        d = b * c;
        int fh = (int) d;
        return fh;
    }
}

解题思路

数值范围为 [-2147483648, 2147483647],超出输出0
a:对10取余,储蓄本轮数据;
b:保存上一轮数据;
c:保存符号
d:保存int最大值,与最后保留整体值
i:循环判断保存X的值并判断X与除10(步进)
fh:做为最终返回值,保存d强制转换为int的值
输出异常,当x值为-2147483648时
不知道为什么会输出47
最终选择将x先做判断
若x值为-2147483648
则直接返回0

声明

以上内容为本人对此题的处理方法
若有侵权,请在下方回复中举证并@本人删除文章
本人小白一枚,自学的JAVA
愿大家都能找到比我更加优秀的方法
若有知道为什么会输出异常的大佬
也请@我讲解一下,提前谢谢大佬了

在此鸣谢

leetcode平台与CSDN平台的支持
还有各位的捧场