/* ===========================================================================================
Wilfredo Cruz Yarlequé wcruzy@gmail.com
http://wcruzy.pe
Constante de Kaprekar: https://es.wikipedia.org/wiki/Constante_de_Kaprekar
=========================================================================================== */
public class Kaprekar1
{
// metodo main
public static void main(String[] args)
{
int i, j, k, temp;
int minuendo, sustraendo, diferencia;
// Convierte los cuatro argumentos de la entrada en un arreglo
int entero[] = new int[4];
for (i=0; i<4; i++)
entero[i] = Integer.parseInt(args[i]);
// Iteraciones para encontrar la constante de Kaprekar
k = 1;
do
{
// Ordena el arreglo en forma ascendente
for (i=0; i<=2; i++)
for (j=i+1; j<=3; j++)
if (entero[i] < entero[j])
{
temp = entero[i];
entero[i] = entero[j];
entero[j] = temp;
}
// Determina el minuendo y el sustraendo
minuendo = entero[0] * 1000 + entero[1] * 100 + entero[2] * 10 + entero[3];
sustraendo = entero[3] * 1000 + entero[2] * 100 + entero[1] * 10 + entero[0];
// Calcula la diferencia
diferencia = minuendo - sustraendo;
System.out.printf("\nIteración %d: %4d %4d --> %4d\n", k, minuendo, sustraendo, diferencia);
// Incrementa en 1 la iteracion
k++;
// Si diferencia no es 6174, se descompone en cuatro dígitos
if (diferencia != 6174)
{
temp = diferencia;
entero[0] = temp / 1000;
temp = temp % 1000;
entero[1] = temp / 100;
temp = temp % 100;
entero[2] = temp / 10;
entero[3] = temp % 10;
}
} while (diferencia != 6174);
System.out.println("\n----------------------------------------\n");
}
}