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; }