繁体   English   中英

使用按位移位反转数字

[英]Reversing a Number using bitwise shift

我试图找到一种方法来扭转数字,没有

  1. 将其转换为字符串以查找长度
  2. 反转字符串并将其解析回来
  3. 运行一个单独的循环来计算长度

我目前正在这样做

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

但我想实现上述3个条件。

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

是否有可能 ? 如果是这样怎么办?

PS:如果输入 1234,它应该返回 4321。我只会反转整数和长整数

怎么样:

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

该代码需要一个非负输入。

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

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

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

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

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

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

class ReversingIntegerNumber {
    
    public int reverse(int originalNum) {
        boolean originalIsNegative = originalNum > 0 ? false : true;
        int reverseNum = 0;
        int modValue;
        originalNum = Math.abs(originalNum);
        while(originalNum != 0) {
            modValue = originalNum % 10;
            if(reverseNum > (Integer.MAX_VALUE - modValue)/10) {
                return 0;
            }
            reverseNum = (reverseNum * 10) + modValue;
            originalNum /= 10;
        }
        return originalIsNegative ? -1 * reverseNum : reverseNum;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM