6174猜想 ,1955年,卡普耶卡(D.R.Kaprekar)研究了对四位数的一种变换:任给出四位数k0,用它的四个数字由大到小重新排列成一个四位数m,再减去它的反序数rev(m),得出数k1=m-rev(m),然后,继续对k1重复上述变换,得数k2.如此进行下去,卡普耶卡发现,无论k0是多大的四位数, 只要四个数字不全相同,最多进行7次上述变换,就会出现四位数6174
import java.io.BufferedInputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class B23
{
public static int getInt(int a){
int n=1;
int temp=a/10;
while(temp!=0){
temp=temp/10;
n++;
}
int[] num=new int[n];
for(int i=0;i<n;i++){
num[i]=(a/(int)Math.pow(10, i))%10;
}
Arrays.sort(num);
int n2=0;
int n1=0;
int[] num2=new int[n];
for(int i=0;i<n;i++){
num2[i]=num[n-1-i];
n2*=10;
n2+=num2[i];
n1*=10;
n1+=num[i];
}
return n2-n1;
}
public static void main(String[] args)
{
ArrayList<Integer> l=new ArrayList<Integer>();
int m=0;
Scanner cin=new Scanner(new BufferedInputStream(System.in));
if(cin.hasNext()){
m=cin.nextInt();
}
l.add(m);
int temp=m;
out:for(;;){
temp=getInt(temp);
System.out.printf(">>%d ",temp);
for(int i=0;i<l.size();i++){
if(l.get(i)==temp){
break out;
}
}
l.add(temp);
}
}
}