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:

EntradaSalida
121palindrome
10not a palindrome

Tu solución

main.cpp — 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_string serí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;
}