Comprobador de palíndromos
/*
Muy buenas a todos. En este programa que os presento hoy, es un comprobador de palindromos.
Para quien no lo sepa, un palindromo es una palabra o numero que se escribe simetricamente, y
se lee igual del derecho y del reves, como por ejemplo "radar", "oso", "oro", "737", "1234321",
etc. Lo que hace este programa es comprobar si el numero que vosotros introducis, puede generar
un palindromo o no, en el numero maximo de intentos que hara el programa por intentar hallarlo.
Pero, ¿como puede un numero generar un palindromo?. Muy sencillo. Se coge el numero que
habeis introducido, y se le da la vuelta para comprobar si el mismo es un palindromo, y si no lo es
se suman el numero sin invertir, mas el numero invertido, y a ese resultado se le vuelve a dar la
vuelta para comprobar el resultado. Si sigue sin ser un palindromo, se repitiria el proceso hasta
dar con uno o hasta que el programa haga su maximo de intentos. Un ejemplo visual seria este:
"64+46=110 ,, 110+011=121 (el 121 ya es palindromo)". Espero que os guste el programa
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define MAX_INTENTOS 1000
int leer_num()
{
int n;
printf("\n Introduce un numero: ");
scanf("%d", &n);
return n;
}
int pasa_a_vector(int x, int vx[])
{
int c=0;
int aux;
x=aux;
while(aux>=10)
{
vx[c++]=aux%10;
aux=aux/10;
}
vx[c++]=aux;
return c;
}
void obtiene_reverso(int vx[], int cont, int vy[])
{
int i;
for(i=0;i<cont;i++)
{
vy[i]=vx[cont-i-1];
}
}
int suma_vectores(int entrada1[], int entrada2[], int cont, int salida[])
{
int i, acarreo=0, suma;
for(i=0;i<cont;i++)
{
suma=entrada1[i]+entrada2[i]+acarreo;
if(suma<=9)
{
salida[i]=suma;
acarreo=0;
}
else
{
salida[i]=suma%10;
acarreo=1;
}
}
if(acarreo==1)
{
salida[cont++]=1;
}
return cont;
}
int es_palindromo(int vsuma[], int cont)
{
int i;
int es=1;
for(i=0;i<cont && es==1;i++)
{
if(vsuma[i]!=vsuma[cont-i-1])
{
es=0;
}
}
return es;
}
void imprimir_palindromo(int num, int vsuma[], int cont, int iter)
{
printf("\n\n El numero %d genera el palindromo siguiente con %d iteraciones: ", num, iter);
int i;
for(i=0;i<cont;i++)
{
printf("%d", vsuma[i]);
}
printf("\n");
}
void copia_vector(int vsuma[], int vnum[], int cont)
{
int i;
for(i=0;i<cont;i++)
{
vnum[i]=vsuma[i];
}
}
int main()
{
int num;
int vnum[1000], reverso_vnum[1000], vsuma[1000];
int cont=0, vueltas=0, encontro=0;
do
{
{
num = leer_num();
}
}
while (num<=0);
cont=pasa_a_vector(num, vnum);
while(vueltas<MAX_INTENTOS && encontro==0)
{
obtiene_reverso(vnum, cont, reverso_vnum);
cont=suma_vectores(vnum, reverso_vnum, cont, vsuma);
if (es_palindromo(vsuma, cont))
{
imprimir_palindromo(num, vsuma, cont, vueltas);
encontro=1;
}
else
{
vueltas++;
copia_vector(vsuma, vnum, cont);
}
}
if (encontro==0) printf("\n\n No fue posible encontrarlo !!!!");
}
