likes
comments
collection
share

算法问题:如何在不把数字转为字符串的前提下反转数字

作者站长头像
站长
· 阅读数 14

1.题目要求

问题要求是:把一组Integer类型的数字进行反转,前提是不能把数字转为String。

例如,输入 123456,输出 654321。

2.解题要点

面对这个问题,要思考以下要点:

  • 数字不能转位字符串,这在题目中明确指出了,不做赘述。

  • 整数除了正数,还包括负数,正数的话可能以“+”开头,也可能不以“+”开头。

  • 如果数字的结尾是“0”如何处理,包括10、100、1000......由于是十进制的数字,因此返回01、001、0001是不合适的,返回1就可以了。

3.解决思路

解决这个问题的关键是要用到我们都很熟悉的取模和取余。

举例来说,985/10=98,98/10=9,通过两次取余就得到了一个两位数的最高位数字;同理,985%10=5,98%10=8,通过两次取模就可以得到两位正整数的最高位数字。

4.示例代码

public static int reverseInteger(int number) {
    // 如果是负数,统一改为整数再处理
    boolean isNegative = number < 0 ? true : false;
    if (isNegative) {
        number = number * -1;
    }
    // 数字的下一位
    int lastDigit = 0;
    // 反转以后需要返回的数字
    int reverse = 0;
    // 通过取模的方式倒序处理数字,其中通过乘以10进行进位,最后通过除以10获得下一个需要处理的数字
    // 如果剩余的数字都是0(原数字最后几位是0)则会被舍弃,返回的数字会比原数字位数少
    while (number >= 1) {
        // 与10取模以后,获取当前数字的最后一位
        lastDigit = number % 10;
        // 首先将之前获得的数字乘以10,将数字往前进一位
        reverse = reverse * 10;
        // 进位以后加上后一位数字
        reverse += lastDigit;
        // 与10相除以后,继续处理前一位数字
        number = number / 10;
    }
    if (isNegative) {
        reverse = reverse * -1;
    }
    return reverse;
}

5.参考资料

www.java67.com/2015/08/how…