使用按位移位反转数字

时间:2011-09-19 14:51:43

标签: java numbers bit-manipulation reverse

我正试图找到一种方法来反转数字而不用

  1. 将其转换为字符串以查找长度
  2. 反转字符串并将其解析回来
  3. 运行单独的循环来计算长度
  4. 我目前正在这样做

     public static int getReverse(int num){
            int revnum =0;
            for( int i = Integer.toString(num).length() - 1 ; num>0 ; i-- ){
                revnum += num % 10 * Math.pow( 10 , i );
                num /= 10;
            }
            return revnum;        
        }
    

    但我想实施上述三个条件。

    我正在寻找一种方法,可能使用位智能移位运算符或其他一些按位运算。

    有可能吗?如果是这样的话?

    PS:如果输入1234作为输入它应该返回4321.我只会逆转整数和长期

3 个答案:

答案 0 :(得分:5)

怎么样:

int revnum = 0;
while (num != 0) {
  revnum = revnum * 10 + (num % 10);
  num /= 10;
}
return revnum;

代码需要非负输入。

这对您来说可能或不重要,但值得注意的是getReverse(getReverse(x))不一定等于x,因为它不会保留尾随零。

答案 1 :(得分:3)

这个怎么样?它也处理负数。

public int getReverse(int num){
   int rst=0;
   int sign;
   sign=num>0?1:-1;

   num*=sign;
   while(num>0){
      int lastNum = num%10;
      rst=rst*10+lastNum
      num=num/10;
   }
   return rst*sign;
}

答案 2 :(得分:0)

Integer.MAX_VALUEInteger.MIN_VALUE 根本不在任何解决方案中考虑。

例如:如果输入是 -21474836472147483647,则 o/p 将分别为 1126087180-1126087180

请尝试以下解决方案,同时处理这两个条件,因此如果在任何时间点数字超出边界条件,即 INPUT_VALUE > Integer.MAX_VALUEINPUT_VALUE < Integer.MIN_VALUE,它将返回 {{1} }

0