算法问题:如何在不把数字转为字符串的前提下反转数字
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.参考资料
转载自:https://juejin.cn/post/7184357886435262524