某书2018笔试题之翻转数字
一、题目
输入一个整数,该整数有符号的32位的int型数字,翻转该数字,如果计算结果溢出,直接返回0.
二、思路
详见代码,注意判断结果溢出的情况。
三、代码
package redbook4; import java.math.BigInteger; import java.util.Scanner; /** * 输入一个整数,该整数有符号的32位的int型数字,翻转该数字,如果计算结果溢出,直接返回0. */ public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNext()) { //输入 int num = in.nextInt(); //调用方法 int result = revs(num); //输出结果 System.out.println(result); } in.close(); } public static int revs(int num) { //数字转换成字符串 String strNum = String.valueOf(num); //String转换成BigInteger BigInteger bigMum = new BigInteger(strNum); BigInteger bigResult = new BigInteger("0"); while (true) { //取出最低位上的数字 BigInteger val = bigMum.remainder(new BigInteger("10")); //反转并存储 bigResult = bigResult.multiply(new BigInteger("10")).add(val); //判断结果是否溢出,如果溢出,直接返回0 String str1 = "-2147483648"; String str2 = "2147483647"; BigInteger bi1 = new BigInteger(str1); BigInteger bi2 = new BigInteger(str2); if (bigResult.compareTo(bi1) < 0 || bigResult.compareTo(bi2) > 0) { return 0; } //取下一位 bigMum = bigMum.divide(new BigInteger("10")); //如果取完了,跳出循环 if (bigMum.equals(new BigInteger("0"))) { break; } } //返回结果, BigInteger->String->int return Integer.parseInt(bigResult.toString()); } }