0
点赞
收藏
分享

微信扫一扫

JAVA数字黑洞

江南北 2022-03-15 阅读 67
给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到
 一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数。
 
 例如,我们从6767开始,将得到
 
 7766 - 6677 = 1089
 9810 - 0189 = 9621
 9621 - 1269 = 8352
 8532 - 2358 = 6174
 7641 - 1467 = 6174
 ... ...
 
 现给定任意4位正整数,请编写程序演示到达黑洞的过程。

输入描述:

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


 

输出描述:

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

输入例子:

6767

输出例子:

7766 - 6677 = 1089
 9810 - 0189 = 9621
 9621 - 1269 = 8352
 8532 - 2358 = 6174

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

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();
        if (isAll(N)) {
            System.out.println(N + " - " + N + " = 0000");
            return;
        }
        int[] arrayBig = new int[4];
        int[] arraySmall = new int[4];
        arraySmall = numberArray(N);
        Arrays.sort(arraySmall);
        arrayBig = arrayReza(arraySmall);
        while (arrayNumber(arrayBig) - arrayNumber(arraySmall) != 6174) {
            printArray(arrayBig);
            System.out.print(" - ");
            printArray(arraySmall);
            int numTemp = arrayNumber(arrayBig) - arrayNumber(arraySmall);
            if (isAll(numTemp)) {
                System.out.println(numTemp + " - " + numTemp + " = 0000");
                return;
            }
            System.out.print(" = " + numTemp);
            arraySmall = numberArray(numTemp);
            Arrays.sort(arraySmall);
            arrayBig = arrayReza(arraySmall);
            System.out.println();
        }
        printArray(arrayBig);
        System.out.print(" - ");
        printArray(arraySmall);
        System.out.print(" = " + (arrayNumber(arrayBig) - arrayNumber(arraySmall)));
    }

    public static int[] numberArray(int n) {
        int[] array = new int[4];
        for (int i = 0; i < 4; i++) {
            array[i] = n % 10;
            n = n / 10;
        }
        return array;
    }

    public static int arrayNumber(int[] k) {
        return k[0] * 1000 + k[1] * 100 + k[2] * 10 + k[3];
    }

    public static void printArray(int[] array) {
        for (int i = 0; i < 4; i++) {
            System.out.print(array[i]);
        }
    }

    public static boolean isAll(int k) {
        int count = k % 10;
        for (int i = 0; i < 4; i++) {
            if (count != k % 10) {
                return false;
            }
            k = k / 10;
        }
        return true;
    }

    public static int[] arrayReza(int[] array) {
        int[] reza = new int[4];
        for (int i = 0; i < 4; i++) {
            reza[3 - i] = array[i];
        }
        return reza;
    }
}

举报

相关推荐

0 条评论