Uff, ese código es puro azar. Generas números aleatorios hasta que coincide que uno es capicúa. Además lo hace al revés. Según ese do while() lo que haces es generar números hasta que uno no es capicúa. La condición del while() es para que se repita, tendría que ser: (u != dm || d != um).
Lo suyo sería asegurar que es capicúa como te decía antes. Veamos:
Para empezar te vendría bien una función:
int generarAleatorio(int minimo, int maximo){ // Devuelve un numero aleatorio en el rango [minimo, maximo]
srand(time(NULL
)); // NULL es equivalente a 0. Lo puedes hacer aqui o antes de llamar a la funcion int numero
= minimo
+ rand() % (maximo
- minimo
+ 1); return numero;
}
Y ahora creas un número aleatorio de 3 cifras. Lo más fácil es que crees los 3 primeros dígitos y agregues los 2 últimos después:
int numero = generarAleatorio(100, 999);
int penultimoDigito = (numero / 10) % 10;
int ultimoDigito = numero / 100;
numero = numero * 100 + penultimoDigito * 10 + ultimoDigito;
Al final esa variable <numero> (si no me equivoco) contendrá siempre un número de 5 cifras capicúa.
Se puede hacer mejor, no hay duda, pero de esta manera ves cuál ha sido el procedimiento a seguir.