问题描述
给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数。
代码
package xianggen.oj;
import java.util.Arrays;
import java.util.Scanner;
/**
*
* @author xianggen 2016年8月2日
*/
public class Main {
public static void main(String[] args) {
int N;
Scanner scan = new Scanner(System.in);
while (scan.hasNext()) {
N = scan.nextInt();
fun(N);
}
scan.close();
}
public static void fun(int N) {
String[] str1 = new String[4];
String[] str2 = new String[4];
int[] dig = new int[4];
for (int i = 0; i < 4; i++) {
dig[i] = N % 10;
N = N / 10;
}
Arrays.sort(dig);
for (int i = 0; i < 4; i++) {
str2[i] = "" + dig[i];
str1[i] = "" + dig[4 - i - 1];
}
int result = fun2(str1, str2);
if (result == 6174||result==0)
return;
else {
fun(result);
}
}
public static int fun2(String[] str1, String[] str2) {
int num1 = 0, num2 = 0, base = 1000;
for (int i = 0; i < str1.length; i++) {
num1 += Integer.parseInt(str1[i]) * base;
num2 += Integer.parseInt(str2[i]) * base;
base /= 10;
}
String sb1 = "", sb2 = "";
for (int i = 0; i < str1.length; i++) {
sb1 += str1[i];
sb2 += str2[i];
}
if(num1==num2){
System.out.println(sb1 + "-" + sb2 + "=" + "0000");
}else{
System.out.println(sb1 + "-" + sb2 + "=" + (num1 - num2));
}
return num1 - num2;
}
}