Constante de Kaprekar = 6174

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;
}

Acerca de programacion1z

Curso de introducción a la programación en C
Esta entrada fue publicada en Informática e Internet. Guarda el enlace permanente.

Deja un comentario