#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 каждый раз.