1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #include <stdio.h> #include <stdlib.h> int alreves(int n, int digitos) { int resto, cocie; if (n<10) // Si tenemos un número de dígitos menor a 2, devolvemos n return n; else { resto = n % 10; cocie = n / 10; return resto*digitos + alreves(cocie, digitos/10); } } int main() { int num, rev; int digitos = 1; int tmp; printf("Dame un numero: "); scanf("%d", &num); // Hacemos un número 10^(numero de cifras-1) con esto alreves determinará el // número de cifras que tiene el número dado. tmp =num; while (tmp>=10) { tmp=tmp/10; digitos=digitos*10; } rev = alreves(num, digitos); // Capicúa o no ? if (rev==num) printf("\nEs capicua"); else printf("\nNO es capicua"); return 0; } |
Una posible solución al cálculo de números capicúa en C. La verdad es que tenemos muchas soluciones a este problema, ésta es una de ellas. El tema es, ¿acarreamos el número de cifras? podemos calcularlo a cada recursión (al principio de alreves()), o en lugar de este número tan raro (1 para 1 cifra, 10 para 2 cifras, 100 para 3 cifras…), poner un número del tipo 1, 2, 3… éste sería capaz de dar la vuelta a número más grandes.
En fin, sólo es una de las 10.000 posibles soluciones al problema 🙂
Pingback: Bitacoras.com /
ola, una pregunta y para ver la cantidad de capicuas que existen entre 1 y 10000 como lo puedo hacer, los numeros no tengo que ingresarlos desde teclado, deben estar ya en un vector, me puedes ayudar plisss!!!
@roberto
Puedes hacer:
int digitos, tmp;
for (int i=1; i< =10000; i++) { tmp =i; while (tmp>=10)
{
tmp=tmp/10;
digitos=digitos*10;
}
if (alreves(i, digitos)==i)
printf(«%d es capicúa\n», i);
}
No lo he probado, espero que funcione. De todas formas, siempre puedes crear otra función que calcule el número de dígitos y llame a capicua() para simplificar un poco este bucle.
gracias por el aporte 🙂 me ha servido de mucho
@Adrica1390
¡ Gracias a ti por leerlo ! Espero traer varios algoritmos parecidos al blog.
Hola pero con Java Recursiva y no me sale
@Sklio
Si no te importa, pasa el código por aquí y le echo un ojo
tienes esto como lo pondrias en un arreglo y con punteros
Te refieres a darle la vuelta a los elementos de un array ? Yo creo que hay formas mejores de hacerlo que esta. Lo más importante es implementar un método swap que intercambie los datos de los elementos del array… o el dato al que apuntan los punteros.