For any 4-digit integer except the ones with all the digits being the same, if we sort the digits in non-increasing order first, and then in non-decreasing order, a new number can be obtained by taking the second number from the first one. Repeat in this manner we will soon end up at the number 6174 -- the black hole of 4-digit numbers. This number is named Kaprekar Constant.

For example, start from 6767, we'll get:

7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
... ...

Given any 4-digit number, you are supposed to illustrate the way it gets into the black hole.

Input Specification:

Each input file contains one test case which gives a positive integer N in the range (0,104).

Output Specification:

If all the 4 digits of N are the same, print in one line the equation N - N = 0000. Else print each step of calculation in a line until 6174 comes out as the difference. All the numbers must be printed as 4-digit numbers.

Sample Input 1:

6767

Sample Output 1:

7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174

Sample Input 2:

2222

Sample Output 2:

2222 - 2222 = 0000

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) throws Exception{
		Scanner sc = new Scanner(System.in);
		String s1=sc.next();
		
		char[] n=String.format("%04d", Integer.parseInt(s1)).toCharArray();
		
		String min=CacuMinandMax(n, 1); 		
		String max=CacuMinandMax(n, 2);
		
		int cha=Integer.parseInt(max)-Integer.parseInt(min);
		String res=bu(cha);
		System.out.println(max+" - "+min+" = "+res);
		while(cha!=6174&&cha!=0) {
			// 补全res为四位数字
			min=CacuMinandMax(res.toCharArray(), 1);
			max=CacuMinandMax(res.toCharArray(), 2);
			cha=Integer.parseInt(max)-Integer.parseInt(min);
			res=bu(cha);
			System.out.println(max+" - "+min+" = "+res);
		}
	}
	// 根据字符数组算出最大最小值
	private static String CacuMinandMax(char[] n,int flag) {
		Arrays.sort(n);
		String min=new String(n);
		
		StringBuilder max = new StringBuilder(); 
		for(int i=n.length-1;i>=0;i--) {
			max.append(n[i]);
		}
		if(flag==1) {
			return min;
		}else {
			return max.toString();
		}
	}


	private static int Cacu(int cha) {
		if(cha==0) return 1;
		int ans=0;
		while(cha!=0) {
			cha=cha/10;
			ans++;
		}
		return ans;
	}
	
	private static String bu(int num) {
		int d=Cacu(num);
		return String.format("%04d", num);
	}
}

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐