[PAT] 1069 The Black Hole of Numbers (20 分)Java
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
1 package pattest; 2 3 import java.util.Arrays; 4 import java.util.Scanner; 5 6 /** 7 * @Auther: Xingzheng Wang 8 * @Date: 2019/2/26 10:17 9 * @Description: pattest 10 * @Version: 1.0 11 */ 12 public class PAT1069 { 13 public static void main(String[] args) { 14 Scanner sc = new Scanner(System.in); 15 int num = sc.nextInt(); 16 do { 17 num = blackHole(num); 18 } while (num != 6174 && num != 0); 19 } 20 21 private static int blackHole(int n) { 22 String s = Integer.toString(n); 23 char[] c = s.toCharArray(); 24 Arrays.sort(c); 25 int[] num = new int[4]; 26 for (int i = 0; i < c.length; i++) { 27 num[3 - i] = c[c.length - i - 1] - '0'; 28 } 29 30 int big, small, temp; 31 small = num[0] * 1000 + num[1] * 100 + num[2] * 10 + num[3]; 32 big = num[3] * 1000 + num[2] * 100 + num[1] * 10 + num[0]; 33 temp = big - small; 34 if (big == temp) { 35 System.out.printf("%04d - %04d = %04d", big, small, temp); 36 } else { 37 System.out.printf("%04d - %04d = %04d", big, small, temp); 38 } 39 if (temp != 6174 && temp != 0) { 40 System.out.println(); 41 } 42 return temp; 43 } 44 }