2017-01-23 6 views
-1

Обратные цифры целого числа.Обратное целое

Пример1: х = 123, 321 возврата example2: х = -123, -321 вернуть

Я пытался использовать код ниже, чтобы решить проблему обратного целого числа. Но когда я конвертирую int в строку и затем преобразовываю строку обратно в int, возникает ошибка. Мне интересно, ограничивает ли распределение памяти этот метод.

Ошибка Строка 4: ошибка: несовместимые типы: возможно преобразование с потерями долго Int

public class Solution { 
    public long reverse(int x) { 
     String input = String.valueOf(x); 
     char[] num = input.toCharArray(); 
     StringBuffer reverse = new StringBuffer(); 
     if(x<0){ 
      reverse.append("-"); 
      for(int i=num.length-1;i>0;i--){ 
       reverse.append(num[i]); 
      } 
     }else{ 
      for(int i=num.length-1;i>=0;i--){ 
       reverse.append(num[i]); 
      } 
     } 
     return Long.parseLong(reverse.toString()); 
    } 
} 
+2

Какая ошибка? Пожалуйста, разместите такую ​​информацию вместе с вашим вопросом. – QBrute

+0

Это поможет узнать, какая ошибка есть ... ;-) – Axel

+0

привет! можете ли вы показать, какую ошибку вы получите? –

ответ

0

Что-то, как это работает:

public long reverse(int x) { 
    String input = String.valueOf(x); //123 
    long result = Long.parseLong(new StringBuilder(input).reverse().toString()); 
    return result; //321 
} 
+0

Он должен возвращать длинный, потому что int, при обратном, может быть числом больше, чем может помещаться в int. –

+0

Не думал об этом. Я отредактирую свой ответ –

+0

Что теперь, вероятно, делает то, что должно, но я бы предположил, что это можно считать «обманом», потому что вы просто вызываете «reverse()» - вопрос, вероятно, должен был увидеть, как кандидат может обращаясь. –

2

Он делает то, что вы просили.

public static long reverseInteger(int n){ 
    String answer = ""; 
    if (n == Integer.MIN_VALUE) 
     return -8463847412L; 
    boolean negative = false; 
    if (n < 0) { 
     negative = true; 
     n = -n; 
    } 
    while (n > 0) { 
     answer += (n % 10); 
     n = n/10; 
    } 
    long toReturn = Long.parseLong(answer); 
    return (negative) ? -toReturn : toReturn; 
} 

Ключевое слово static является необязательным, конечно. Это зависит от того, как вы его используете.

+0

Почему вы используете в штучной форме типы Integer и Long, а не 'int' и' long'? –

+0

Причина: Мне это нужно было один раз и не редактировал. Подождите 20 секунд;) –

+0

Попробуйте вызвать reverseInteger (Integer.MIN_VALUE) ;-) –

1

Сообщение об ошибке, которое вы получаете, вероятно, связано с чем-то еще в вашем коде; возможно, вы присваиваете значение, возвращаемое reverse() (которое является длинным) переменной int.

Однако в коде отсутствует ненужная неэффективность. Вы создаете String, только для повторного анализа его числа. Следующий код возвращает перевернутый номер без использования каких-либо строк вообще:

public static long reverse(int n){ 
    long r = 0; 
    while (n != 0) { 
     r *= 10; 
     r += (n % 10); 
     n /= 10; 
    } 

    return r; 
} 

Обратите внимание, что этот метод работает правильно для отрицательных чисел тоже, без того, чтобы проверить их специально.

Этот метод работает для всех возможных значений int.

+0

Жесткие коды, такие как «Integer.MIN_VALUE», не являются неправильным способом, поскольку затраты на размышления;) –

+0

На самом деле, моя первая версия должна была обрабатывать Integer.MIN_VALUE специально, но мое последнее редактирование работает для всех возможных значений int, включая Integer.MIN_VALUE , @ GrzegorzGórkiewicz –

+0

Школьное решение (что неплохо). Другой вариант - играть со строками. –