Обращение числа с помощью побитового сдвига - PullRequest
3 голосов
/ 19 сентября 2011

Я пытаюсь найти способ обратить число без

  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. Я буду менять только целые и длинные значения

Ответы [ 2 ]

5 голосов
/ 19 сентября 2011

Как насчет:

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

Код ожидает неотрицательный ввод.

Это может иметь или не иметь значения для вас, но стоит отметить, что getReverse(getReverse(x)) не обязательноравняется x, так как не сохраняет конечные нули.

3 голосов
/ 19 сентября 2011

Как насчет этого?Он также обрабатывает отрицательные числа.

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