Averiguando si un numero es palindromo

25 06 2008

Hoy estaba de buen humor asi que me puse a revisar capitulos viejos de mi libro de programacion y me encontre con un ejercicio sorbe los palindromos que ya habia resuelto de la manera mas floja posible y me dieron ganas de volverlo a hacer a ver que tal me iba, el resultado fue: un metodo infalible para detectar palindromos de numeros (Quien sabe palabras) en numeros menores de 11 digitos! Dejo la solucion (17 Lineas) y una explicacion porque esta algo engorroso xD:

#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include <cmath>
int main(){
    int numero, cifras, iguales=0;
    cin >> numero;
    for (int contador=0, diez=1, modulo=10, temporal; ( temporal=(numero%modulo)/diez) != 0; diez*=10, modulo*=10, contador++, cifras=contador);
    for ( int i = 0, antimodulo=static_cast<int>(pow(10,cifras)), antidiez=static_cast<int>(pow(10,cifras)/10)  ,diez=1, modulo=10; i < cifras; i++, modulo*=10, diez*=10 , iguales++, antidiez/=10, antimodulo/=10)
    if( (numero%antimodulo)/antidiez != (numero%modulo)/diez)
    break;
    cifras==iguales ? cout << "El numero es palindromo!\n" : cout << "El numero no es palindromo!\n";
    return 0;
}

Muy bien, ahora la explicacion. No hay nada muy complicado hasta el primer for, para los que no lo capten, en el averiguo cual es el numero de cifras de el numero introducido por el usuario (jj) y en el segundo averiguo si es palindromo haciendo uso de antimodulo,antidiez(Para analizarla arriba) y modulo y diez (Para analizar abajo), por ejemplo, tomemos el numero 12345, con el if que pongo se analizaria asi. La primera mitad de la comparacion ((numero%antimodulo)/antidiez)) daria de resultado 1 (El primer numero del numero) y la segunda ((numero%modulo)/diez)) daria 5 (El ultimo numero del numero), como son diferentes, el for sigue corriendo hasta la proxima comparacion donde antimodulo y diez habran sido reducidos diez veces y modulo y diez habran sido aumentados diez veces, entonces la comparacion dara 2 en la mitad de arriba y 4 en la mitad de abajo. Despues de ese for hago una comparacion con el operador unario ? para saber si es palindromo y voila! Como saber si un numero es palindromo en catorce lineas! Salu2


Acciones

Información

Deja un comentario