题目描述

  • 给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序
  • 然后用第1个数字减第2个数字,将得到一个新的数字。
  • 一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数。

输入描述

  • 输入给出一个(0, 10000)区间内的正整数N。

输出描述:

  • 如果N的4位数字全相等,则在一行内输出“N - N = 0000”
  • 否则将计算的每一步在一行内输出,直到6174作为差出现
  • 注意每个数字按4位数格式输出。

代码实现

  1. package com.liuyong666.pat;
  2. import java.util.Arrays;
  3. import java.util.Scanner;
  4. public class Main {
  5. public static void main(String[] args) {
  6. Scanner sc = new Scanner(System.in);
  7. int n = sc.nextInt();
  8. while(true){
  9. int[] arr = new int[4];
  10. arr[0] = n / 1000;
  11. arr[1] = (n - arr[0] * 1000) / 100;
  12. arr[2] = (n - arr[0] * 1000 -arr[1] * 100) / 10;
  13. arr[3] = n % 10;
  14. String temp = ""+arr[0]+arr[1]+arr[2]+arr[3];
  15. if(arr[0] == arr[1] && arr[0] == arr[1] && arr[0] == arr[2] && arr[0] == arr[3]){
  16. System.out.println(temp+" - "+temp+" = 0000");
  17. break;
  18. }
  19. Arrays.sort(arr);
  20. StringBuilder str =new StringBuilder();
  21. for(int i = 0; i < 4; i++){
  22. str.append(Integer.toString(arr[i]));
  23. }
  24. StringBuilder xiao_str = new StringBuilder(str);
  25. StringBuilder da_str = str.reverse();
  26. n = Integer.valueOf(da_str.toString()) - Integer.valueOf(xiao_str.toString());
  27. System.out.println(da_str.toString()+" - "+xiao_str.toString()+" = " + n);
  28. if(n == 6174){
  29. break;
  30. }
  31. }
  32. }
  33. }