No noté ninguna respuesta que resolviera este problema sin usar espacio adicional, es decir, todas las soluciones que vi usaban una cadena u otro número entero para revertir el número u otras estructuras de datos.
Aunque los lenguajes como Java se desbordan en el desbordamiento de enteros, este comportamiento no está definido en lenguajes como C. ( Intente revertir 2147483647 (Integer.MAX_VALUE) en Java ) La
solución podría ser usar un largo o algo pero, estilísticamente, no lo sé como ese enfoque
Ahora, el concepto de un número palindrómico es que el número debe leer el mismo hacia adelante y hacia atrás. Excelente. Con esta información, podemos comparar el primer dígito y el último dígito. El truco es que, para el primer dígito, necesitamos el orden del número. Digamos, 12321. Dividir esto entre 10000 nos daría el primer 1. El 1 posterior se puede recuperar tomando el mod con 10. Ahora, para reducir esto a 232 (12321 % 10000)/10 = (2321)/10 = 232
.. Y ahora, el 10000 necesitaría ser reducido por un factor de 2. Entonces, ahora al 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 según la sugerencia de Hardik para cubrir los casos donde hay ceros en el número.