原题
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
题目大意
输入一个整数对其进行翻转
解题思路
通过求余数求商法进行操作。
代码实现
public class Solution {
public int reverse(int x) {
long tmp = x;
// 防止结果溢出
long result = 0;
while (tmp != 0) {
result = result * 10 + tmp % 10;
tmp = tmp / 10;
}
// 溢出判断
if (result < Integer.MIN_VALUE || result > Integer.MAX_VALUE) {
result = 0;
}
return (int) result;
}
}
第一种方法:
[java] view plain copy
- /**
- * <pre>
- * 实现将整形数字反转
- * </pre>
- *
- * @param num
- * 要反转的数字
- * @return 反转后的数字
- */
- public static int numReverse(int num) {
- int modNum = 0;// 余数
- int result = 0;
- while (num / 10 != 0) {// 当num为一位数时,跳出循环
- modNum = num % 10;
- num = num / 10;
- result = result * 10 + modNum;
- }
- return result * 10 + num;// 当num为一位数时,返回结果
- }
思路:
(1)这道算法题属于OJ中比较简单的题目。题意是将给定的整数逆序,但是涉及到几种特殊情况需要考虑。
(2)为了便于处理,将整数转为字符串。我们只需要遍历一次该字符串即可。
(3)在遍历的过程中,需要对正负数进行判断,当字符串长度大于0时,先取第一个字符进行判断,看其是否等于‘-’,如果相等
就是负数,需要设置一个标志位。
(4)在继续遍历的过程中,只需判断字符是否为数字(显然都是),然后通过标志位判断正负后进行累加操作。
(5)需要注意的时,翻转后的的整数可能会超过int的最大值,为了防止越界,我们定义的sun的类型必须为long,这样当大于或
者小于int的最大值和最小值时就返回0;其余情况直接将long强转为int,并返回结果。
(6)注意上述几个方面后,OJ通过肯定没问题。
算法实现代码如下所示(希望对你有所帮助,谢谢):
[java] view plain copy
- public static int reverse(int x) {
- String s = String.valueOf(x);
- long sum = 0;
- boolean isnegitive = false;
- for (int i = s.length()-1; i >=0 ; i--) {
- if(s.charAt(0)=='-'){
- isnegitive = true;
- }
- if( Character.isDigit(s.charAt(i))){
- if(isnegitive){
- sum = sum * 10 - Integer.parseInt(String.valueOf(s.charAt(i)));
- }else{
- sum = sum * 10 + Integer.parseInt(String.valueOf(s.charAt(i)));
- }
- }
- }
- if(sum>Integer.MAX_VALUE || sum<Integer.MIN_VALUE){
- return 0;
- }
- return (int)sum;
- }
第二种方法:
[java] view plain copy
- /**
- * <pre>
- * 实现将整形数字反转
- * </pre>
- *
- * @param num
- * 要反转的数字
- * @return 反转后的数字
- */
- public static int reverse(int num) {
- StringBuffer sb = new StringBuffer();
- String str = sb.append(num).reverse().toString();
- return Integer.parseInt(str);
- }
int BinaryReverseValue(int x)
{
int y=0;
int z;
while(x!=0)
{
z=x%2;
y=(y<<1)^z;
x=x/2;
}
return y;
}
上面这个函数用来返回输入数的二进制的翻转值