Я не заметил никаких ответов, которые решали бы эту проблему без лишнего пробела, т. Е. Все решения, которые я видел, использовали либо строку, либо другое целое число, чтобы перевернуть число, либо некоторые другие структуры данных.
Хотя такие языки, как Java, оборачиваются при целочисленном переполнении, это поведение не определено в таких языках, как C. ( Попробуйте изменить 2147483647 (Integer.MAX_VALUE) в Java ) Обходной путь
может заключаться в использовании длинного или чего-то еще, но стилистически я не совсем нравится такой подход.
Итак, концепция палиндромного числа заключается в том, что число должно читаться одинаково вперед и назад. Отлично. Используя эту информацию, мы можем сравнить первую цифру и последнюю цифру. Хитрость в том, что для первой цифры нам нужен порядок чисел. Скажем, 12321. Разделив это на 10000, мы получим ведущую единицу. Конечную 1 можно получить, взяв мод с 10. Теперь уменьшим это до 232 (12321 % 10000)/10 = (2321)/10 = 232
.. А теперь 10000 нужно уменьшить в 2 раза. Итак, теперь перейдем к коду Java ...
private static boolean isPalindrome(int n) {
if (n < 0)
return false;
int div = 1;
// find the divisor
while (n / div >= 10)
div *= 10;
// any number less than 10 is a palindrome
while (n != 0) {
int leading = n / div;
int trailing = n % 10;
if (leading != trailing)
return false;
// % with div gets rid of leading digit
// dividing result by 10 gets rid of trailing digit
n = (n % div) / 10;
// got rid of 2 numbers, update div accordingly
div /= 100;
}
return true;
}
Отредактировано в соответствии с предложением Хардика , чтобы охватить случаи, когда в числе есть нули.