如何在不把数字转为字符串的前提下反转数字

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

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.示例代码

publicstaticintreverseInteger(intnumber) {
// 如果是负数,统一改为整数再处理booleanisNegative=number<0?true : false;
if (isNegative) {
number=number*-1;
    }
// 数字的下一位intlastDigit=0;
// 反转以后需要返回的数字intreverse=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;
    }
returnreverse;
}


目录
相关文章
|
6月前
|
算法 前端开发
根据模式串构造最小数字
根据模式串构造最小数字
51 0
给定一个正整数N,将其表示为数字1,3,7,15相加的形式输出。请编码找出使上述数字出现的总次数最少(每个数字可以重复使用)的组合。
给定一个正整数N,将其表示为数字1,3,7,15相加的形式输出。请编码找出使上述数字出现的总次数最少(每个数字可以重复使用)的组合。
|
4月前
去除数组中重复的那个数字
去除数组中重复的那个数字
|
6月前
|
存储 弹性计算 运维
判断数字大小
【4月更文挑战第29天】
41 1
|
6月前
字符串,每个里面包含0-N个数字,如3,8,2,编写函数,将两个这样的字符串合并,并且输出的字符串里面没有重复的数字,并从大到小排列.
字符串,每个里面包含0-N个数字,如3,8,2,编写函数,将两个这样的字符串合并,并且输出的字符串里面没有重复的数字,并从大到小排列.
35 0
|
存储 算法 JavaScript
寻找数组中的重复数字
寻找数组中的重复数字
寻找数组中的重复数字
|
机器学习/深度学习 Java
Java数字黑洞给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到 一个新的数字。一直重复这样做,我们很快会停在有“数字
Java数字黑洞给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到 一个新的数字。一直重复这样做,我们很快会停在有“数字
137 0