Java 使用位移位反转数字

Java 使用位移位反转数字,java,numbers,bit-manipulation,reverse,Java,Numbers,Bit Manipulation,Reverse,我正在试图找到一种方法,在没有 将其转换为字符串以查找长度 反转字符串并重新解析它 运行单独的循环以计算长度 我现在是这样做的 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 ,

我正在试图找到一种方法,在没有

  • 将其转换为字符串以查找长度
  • 反转字符串并重新解析它
  • 运行单独的循环以计算长度
  • 我现在是这样做的

     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\u VALUE
    Integer.MIN\u VALUE
    在任何解决方案中都不考虑

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

    请在处理这两个条件的情况下尝试以下解决方案,因此,如果在任何时间点,数字超出边界条件,即
    INPUT\u VALUE>Integer.MAX\u VALUE
    INPUT\u 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;
        }
    }
    

    您将如何反转
    10000
    ?只有
    1
    ?您将失去“零”。您不太可能找到一种用位运算反转十进制表示法的好方法。“使用位移位”这里绝对没有进行位移位。如果不反转负数,则可以,我将把它转换成正数,然后将其反转,然后再将其转换回负数我想现在不会有太大问题,但如果是这样的话,我可能不得不重新考虑我使用这个函数的目的。我想我会得到同样的问题,即使与前一个implementation@gautham5678:正确:这是函数签名(
    int
    ->
    int
    )的一个功能,而不是此实现的一个功能。