Проверка, является ли int палиндромом или нет, без преобразования в строку?

#java #string #int #palindrome

#java #строка #int #палиндром

Вопрос:

 public class Palindrome {
    public static void main(String args[]) {
        int x = 121;
        int res = 0;
        while (x > 0) {
            res = res * 10   (x % 10);
            x /= 10;
        }
        if (x - res == 0) {
            System.out.println("True"   res);
        } else
            System.out.println("False"   res);
    }
}
  

Привет! Этот код предназначен для проверки, является ли целое число палиндромом, без преобразования int в String . По какой-то причине компьютер считает, что res это не то же самое, что x хотя оба представляют число 121 . Ценю вашу помощь и заранее благодарю!

Комментарии:

1. Они не совпадают, вы выполняете x / = 10, что изменяет x, и в конце x станет 0.

2. компьютер считает, что res не совпадает с x , потому что это не так. x начинался как 121, а после цикла равен 0.

3. x - res == 0 это необычный способ написания x == res 🙂

4. Это всего лишь приблизительный код, и я несколько раз переставлял каждую строку, чтобы понять, что именно вызывает ошибку. Я был суеверен.

Ответ №1:

Вы были близки. Вот решение, основанное на том, что вы сделали:

 static bool isPalindrome (int n1, int n2) {
    return getReverseInteger(n1) == n2;
}

static int getReverseInteger (int n) {
    int nReversed = 0;
    while (n > 0) {
      int digit = n % 10;
      nReversed = nReversed * 10   digit;
      n = (n - digit) / 10;
    }
    return nReversed;
}
  

Комментарии:

1. Сработает ли это, даже если вы просто оставите это как n = n / 10 или я что-то упускаю?

2. Нет, вам нужно вычесть значение n % 10. Пример: 121/10 = 12.1, 12.1/10 = 1.21, 1.21/10 = 0.21 ( т. е. никогда не достигает 0).

3.(121 — 1)/10 = 12, (12 — 2)/10 = 1, (1-1/10) = 0

4. Но поскольку это так int , в качестве целого числа потребуется только 12.1, которое равно всего 12. Думаю, я не ошибаюсь

5. Да, на самом деле вы правы. Я думал о делении с плавающей точкой. Но если x — это int, то вы можете просто делить на 10 каждый раз.