某书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());
    }
}
View Code

 

posted @ 2017-10-25 22:57  AI菌  阅读(451)  评论(0编辑  收藏  举报