输入参数 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));
}
}