Fácil–medio · Dígitos
Número palíndromo
Un número es palíndromo si se lee igual al revés: 121 sí, 123 no. Si resolviste Invertir un número, ya tienes el algoritmo entero — este problema va de reconocerlo.
En una fraseInvierte el número y compáralo con el original: si son iguales imprime palindrome, si no not a palindrome, y no hace falta convertir a cadena.
El problema
Entrada: un entero positivo N (1 ≤ N ≤ 10⁹).
Salida: palindrome si N se lee igual al revés; si no, not a palindrome (exactamente estas palabras).
Ejemplos:
| Entrada | Salida |
|---|---|
121 | palindrome |
10 | not a palindrome |
Tu solución
Entrada personalizada para «Ejecutar mi entrada»
La corrección corre en tu navegador contra pruebas ocultas. Un bucle infinito se corta a los 3 segundos — aun así, asegúrate de que todo bucle tenga salida. Tu código se guarda solo mientras escribes.
¿Atascado? Pistas
Pista 1 — una trampa: el bucle se come la entrada
El bucle de inversión n /= 10 hasta llegar a cero. Hay que comparar con el original, así que guárdalo antes: int orig = n;. Olvidar la copia es el bug de este problema.
Pista 2 — los números de un dígito
El 7 invertido es 7 — todo número de un dígito es palíndromo automáticamente, y el enfoque invertir-y-comparar lo maneja sin casos especiales. Si tu código necesita if (n < 10), te pasaste de ingeniería.
Solución (¡inténtalo primero!)
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int orig = n;
int rev = 0;
while (n > 0) {
rev = rev * 10 + n % 10;
n /= 10;
}
if (rev == orig) cout << "palindrome" << endl;
else cout << "not a palindrome" << endl;
return 0;
}
Con esto el kit de dígitos queda completo: contar, sumar, invertir y ahora comparar. Date cuenta: la solución son dos líneas nuevas sobre el problema anterior — la reutilización de patrones es la verdadera lección. Siguiente: formas con Pirámide de asteriscos.
Análisis profundo
Por qué funciona
Cuando ya sabes invertir, un palíndromo es invertir y comparar. La lección es detectar la reutilización, no escribir código nuevo.
El coste
O(d); puedes reducirlo a la mitad construyendo desde los dos extremos.
Dónde falla
- Los negativos nunca son palíndromos por el signo menos, pero -121 se invierte numéricamente a -121. Decide ese caso antes de programar.
to_stringsería el camino fácil en un compilador real, pero este motor no tiene std::string: la vía numérica es la que corre aquí.
Siguiente paso
La misma pregunta de simetría sobre texto: Invertir una cadena.
Dos cosas para recordar
- Un problema nuevo suele ser uno viejo más una comparación.
- Resuelve los negativos antes del algoritmo, no después.
🐞 Esta versión falla: ábrela y pruébala
Compara con n, que el bucle ya dejó en 0
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int rev = 0, m = n;
while (m > 0) {
rev = rev * 10 + m % 10;
m /= 10;
}
if (n == rev) cout << "yes" << endl;
else cout << "no" << endl;
return 0;
}