Java demonstration of digital black hole 6174 (Kaprekar constant)

1 Introduction
The number black hole 6174 is also called "Kaprekar".
Randomly choose a four-digit number (the numbers cannot be exactly the same), arrange all the numbers from large to small, and then arrange all the numbers from small to large, and subtract the latter from the former to get a new number; repeat the newly obtained Perform the above operations on the number, within 7 steps, you will definitely get 6174.
Such as: optional four digits: 3, 6, 8, 8
8863-3688=5175 (one step)
7551-1557=5994 (two steps)
9954-4599=5355 (three steps)
5553-3555=1998 (four steps)
9981-1899=8082 (five steps)
8820-288=8532 (six steps)
8532-2358=6174 (seven steps)

2 Java code implementation

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

public class KaprekarOne {
    
    
    public static void main(String[] args){
    
    
        Integer kapre=6174;
        System.out.println("请依次输入任意不相同的4个数: ");
        int[] intArr=new int[4];
        for(int i = 0; i < 4; i++){
    
    
            Scanner inputW = new Scanner(System.in);
            intArr[i]=inputW.nextInt();
        }
        System.out.println("*******************************");
        for (int i=1;i<9;i++){
    
    
            int kap=kaprekar(intArr);
            if(Integer.valueOf(kap).equals(kapre)){
    
    
                System.out.println("第 "+i+" 步 Kaprekar常数6174出现!");
                break;
            }
            intArr=intToArray(kap);
        }


    }
    //计算数值
    static int kaprekar(int[] arrayInt) {
    
    
        //计算最小的四位数
        //数组升序
        Arrays.sort(arrayInt);
        String strIntMini="";
        for (int num : arrayInt) {
    
    
            strIntMini=strIntMini+Integer.toString(num);
        }
        int intMini=Integer.parseInt(strIntMini);
        System.out.println("最小的4位数是: "+intMini);
        //计算最大的四位数
        //数组降序
        int sizeArray=arrayInt.length;
        int[] newArrayInt=new int[sizeArray];
        newArrayInt=arrayIntDesc(arrayInt);
        String strIntMax="";
        for (int num : newArrayInt) {
    
    
            strIntMax=strIntMax+Integer.toString(num);
        }
        int intMax=Integer.parseInt(strIntMax);
        System.out.println("最大的4位数是: "+intMax);
        int kap=intMax-intMini;
        System.out.println("二数相减为:"+intMax+"-"+intMini+"="+kap);
        System.out.println("*******************************");
        return kap;
    }
    //数组降序
    static int[] arrayIntDesc(int[] arrayInt){
    
    
        int sizeArray=arrayInt.length;
        int[] newArrayInt=new int[sizeArray];
        for (int i = arrayInt.length - 1; i >= 0; i--) {
    
    
            newArrayInt[sizeArray-1-i]=arrayInt[i];
        }
        return newArrayInt;
    }
    //数字转数组
    static int[]intToArray(int num){
    
    
        String sNum=Integer.toString(num);
        int lNum=sNum.length();
        int[] arrayInt=new int[lNum];
        for (int i=0;i<lNum;i++){
    
    
            arrayInt[i]=Integer.parseInt(sNum.substring(i,i+1));
        }
        return arrayInt;
    }

}


3 running results
insert image description here

おすすめ

転載: blog.csdn.net/helloworldchina/article/details/105717240