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 🙂