Não notei nenhuma resposta que resolvesse esse problema sem espaço extra, ou seja, todas as soluções que vi usavam uma string ou outro número inteiro para reverter o número ou algumas outras estruturas de dados.
Embora linguagens como Java envolvam o estouro de números inteiros, esse comportamento é indefinido em linguagens como C. ( Tente reverter 2147483647 (Integer.MAX_VALUE) em Java ) A
solução alternativa poderia ser usar um longo ou algo parecido, mas, estilisticamente, não o faço. como essa abordagem.
Agora, o conceito de um número palindrômico é que o número deve ler o mesmo para a frente e para trás. Ótimo. Usando essas informações, podemos comparar o primeiro e o último dígito. Truque é que, para o primeiro dígito, precisamos da ordem do número. Digamos, 12321. Dividir isso por 10000 nos daria o primeiro. O 1 final pode ser recuperado usando o mod com 10. Agora, reduza-o para 232 (12321 % 10000)/10 = (2321)/10 = 232
.. E agora, o 10000 precisaria ser reduzido por um fator de 2. Então, agora vamos para o código 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;
}
Editado conforme a sugestão de Hardik para cobrir os casos em que há zeros no número.