0
点赞
收藏
分享

微信扫一扫

【Java 实现经典算法】数字黑洞

猎书客er 2022-03-11 阅读 70

题目描述

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

输入描述

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

输出描述:

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

代码实现

package com.liuyong666.pat;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        while(true){
            
            int[] arr = new int[4];
            arr[0] = n / 1000;
            arr[1] = (n - arr[0] * 1000) / 100;
            arr[2] = (n - arr[0] * 1000 -arr[1] * 100) / 10;
            arr[3] = n % 10;
            
            String temp = ""+arr[0]+arr[1]+arr[2]+arr[3];
            if(arr[0] == arr[1] && arr[0] == arr[1] && arr[0] == arr[2] && arr[0] == arr[3]){
                System.out.println(temp+" - "+temp+" = 0000");
                break;
            }
            
            Arrays.sort(arr);
            
            StringBuilder str =new StringBuilder();
            for(int i = 0; i < 4; i++){
                str.append(Integer.toString(arr[i]));
            }
            
            StringBuilder xiao_str = new StringBuilder(str);
            StringBuilder da_str = str.reverse();
            
            n = Integer.valueOf(da_str.toString()) - Integer.valueOf(xiao_str.toString());
            System.out.println(da_str.toString()+" - "+xiao_str.toString()+" = " + n);
            
            if(n == 6174){
                break;
            }
        }
        
        
    }
    
}
举报

相关推荐

0 条评论