数字黑洞6174(Kaprekar常数)之java演示

1 简介
数字黑洞6174,也称“卡谱耶卡常数”(Kaprekar)。
任意选一个四位数(数字不能完全相同),把所有的数字从大到小排列,再把所有数字从小到大排列,用前者减去后者,得到一个新的数;重复将新得到的数进行上述操作,7步之内,必然会得到6174。
如:任选四位数:3、6、8、8
8863-3688=5175 (一步)
7551-1557=5994 (二步)
9954-4599=5355 (三步)
5553-3555=1998 (四步)
9981-1899=8082 (五步)
8820-288=8532 (六步)
8532-2358=6174 (七步)

2 Java代码实现

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 运行结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/helloworldchina/article/details/105717240