ALEJANDRO IZQUIERDO BONILLA
/* La constante de Kaprekar es aquella que resulta de tomar un número de 4 cifras, sea por ejemplo el 3582, ordenar sus cifras en orden decreciente, en este caso 8532, y también ordenarlas en orden creciente, 2358, restar ambos números, 8532-2358=6174, y volver a aplicar este proceso al número resultante (bien añadiendo ceros a la dcha para el mayor de ellos o ceros a la izqda para el menor de ellos), de forma que el resultado final siempre será 6174. Se puede ver que independientemente del número inicial el proceso siempre acaba en el 6174, es decir, es un punto fijo de este sistema dinámico. (Evidentemente se exceptúan los números con las 4 cifras iguales que dan como resultado cero). */
#include <iostream>
using namespace std;
int reordenar(int numero, int *p)
{
int dig[4], momen,i,j;
dig[0] = numero/1000;
momen = numero-dig[0]*1000;
dig[1] = (momen)/100;
momen = momen-dig[1]*100;
dig[2] = momen/10;
dig[3] = momen-dig[2]*10;
if(dig[0]==dig[1] && dig[1]==dig[2] && dig[2]==dig[3])
{
return 1;
}
for(j=0;j<=3;j++)
{
for(i=0;i<3;i++)
{
if(dig[i]<dig[i+1])
{
momen = dig[i];
dig[i] = dig[i+1];
dig[i+1] = momen;
}
}
}
*p=(dig[0]*1000)+dig[1]*100+dig[2]*10+dig[3];
for(j=0;j<=3;j++)
{
for(i=0;i<3;i++)
{
if(dig[i]>dig[i+1])
{
momen=dig[i];
dig[i] =dig[i+1];
dig[i+1]=momen;
}
}
}
*(p+1) = dig[0]*1000+dig[1]*100+dig[2]*10+dig[3];
return 0;
}
int main()
{
int numero,mem[2];
cout<<«Introduce un numero de 4 digitos: «;
cin>>numero;
while(numero!=6174)
{
cout<<«Numero: «<<numero<<endl;
if(reordenar(numero,&mem[0]) == 0)
{
cout<<mem[0]<<» – «<<mem[1]<<» = «<<mem[0]-mem[1]<<endl;
numero = mem[0]-mem[1];
} else {
cout<<«Numero no valido»<<endl;
return 1;
}
}
return 0;
}