Hola. Una forma sería convertir cada número a cadena, copiarla, invertir la copia y finalmente comparar. Si son iguales, es capicúa.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* reverse(char* s)
{
int i, j;
char c;
for (i = 0, j = strlen(s) - 1; i < j; i++, j--) {
c = s[i];
s[i] = s[j];
s[j] = c;
}
return s;
}
char* itoa(int n, char s[])
{
int i, sign;
/* Registrar el signo */
if ((sign = n) < 0)
n = -n;
i = 0;
do {
s[i++] = n % 10 + '0';
} while ((n /= 10) > 0);
if (sign < 0)
s[i++] = '-';
s[i++] = '\0';
reverse(s);
return s;
}
void mostrarCapicuas(const int n)
{
int i, j;
char a[80], b[80];
for (j = 10, i = 0 ; i < n; ++j) {
itoa(j, a);
strcpy(b, a);
reverse(b);
if (!strcmp(b, a)) {
if (i % 10 == 0) putchar('\n');
printf("%5d ", j);
fflush(stdout);
++i;
}
}
}
int main(void)
{
int n;
puts("Este programa encuentra los n primeros enteros capicuas\n");
printf("Deme n: ");
fflush(stdout);
scanf("%d", &n);
mostrarCapicuas(n);
putchar('\n');
return 0;
}
Un saludo.