Я не заметил ни одного ответа, который бы решал эту проблему без лишних пробелов, т. Е. Во всех решениях, которые я видел, использовалась либо строка, либо другое целое число для обращения числа, либо некоторые другие структуры данных.
Хотя в таких языках, как Java, используется переполнение целых чисел, это поведение не определено в таких языках, как C. ( Попробуйте изменить 2147483647 (Integer.MAX_VALUE) в Java )
Обходной путь может состоять в том, чтобы использовать long или что-то в этом роде, но стилистически мне не нравится такой подход.
Теперь концепция палиндромного числа заключается в том, что число должно читаться одинаково вперед и назад. Отлично. Используя эту информацию, мы можем сравнить первую цифру и последнюю цифру. Хитрость в том, что для первой цифры нам нужен порядок числа. Скажем, 12321. Разделив это на 10000, мы получим лидирующие 1. Трейлинг 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;
}
Отредактировано в соответствии с предложением Hardik , чтобы охватить случаи, когда в числе есть нули.