整形反转,以 Long 类型为例

输入参数 Long 类型 a,倒序输出 Long。例如:输入 a=12342 输出 24321。输入 a=-12342 输出 -24321,a 不限范围。 需考虑所有可能异常情况,不能 try 不能抛异常。异常情况返回 0。Long 类型的最大值是 9223372036854775807

Don’t say much, just go to the code.

package org.bood.leetcode;

/**
 * 反转长整型数字,不使用 try-catch 或抛出异常
 *
 * @author bood
 * @since 2022/01/11
 */
public class ReverseNumber {

    /**
     * 反转给定长整型数字的数字位
     * 如果反转后的数字溢出长整型值的范围,则返回 0
     *
     * @param num 要反转的数字
     * @return {@link Long }
     * @author bood
     * @since 2024/01/02
     */
    public static Long reverseNumber(Long num) {
        // 初始化结果为 0
        long res = 0L;

        while (num != 0) {
            // 获取数字的最后一位
            long digit = num % 10;

            // 在执行乘法和加法之前检查溢出
            if (res > Long.MAX_VALUE / 10 || (res == Long.MAX_VALUE / 10 && digit > 7)) {
                // 如果继续将会溢出
                return 0L;
            }
            if (res < Long.MIN_VALUE / 10 || (res == Long.MIN_VALUE / 10 && digit < -8)) {
                // 如果继续将会下溢
                return 0L;
            }

            // 将获取的数字位追加到反转数字中
            res = res * 10 + digit;

            // 从数字中去掉最后一位
            num /= 10;
        }

        return res;
    }

    public static void main(String[] args) {
        System.out.println("反转 0:" + reverseNumber(0L));
        System.out.println("反转 1000:" + reverseNumber(1000L));
        System.out.println("Long.MAX_VALUE:" + Long.MAX_VALUE);
        System.out.println("反转 Long.MAX_VALUE:" + reverseNumber(Long.MAX_VALUE));
        System.out.println("Long.MIN_VALUE:" + Long.MIN_VALUE);
        System.out.println("反转 Long.MIN_VALUE:" + reverseNumber(Long.MIN_VALUE));
        System.out.println("反转 7185774586302733229L 溢出: " + reverseNumber(7185774586302733229L));
        System.out.println("反转 -8185774586302733229L 溢出: " + reverseNumber(-8185774586302733229L));
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值