Dotcpp  /  试卷列表  /  Java  /  题目 8034

验证6174问题(取任意一个4位数,4位数不能相同,将

验证6174问题(取任意一个4位数,4位数不能相同,将该数的4个数字重新组合,形成可能的最大数和可能的最小数,再将两者之间的差求出来;对此差值重复同样过程,最后你一定会得到6174)

答案
import java.util.Arrays;
import java.util.Scanner;

public class Kapreka6174 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入各位数字不完全相同的四位数:");
        int num = sc.nextInt();
        sc.close();

        int count = 0;
        int cur = num;
        // 循环直到结果等于6174
        while (cur != 6174) {
            cur = calcDiff(cur);
            count++;
            System.out.println("第" + count + "轮计算结果:" + cur);
        }
        System.out.println("经过" + count + "轮迭代,最终得到6174,验证完毕");
    }

    /**
     * 对一个四位数求最大数与最小数的差值
     */
    public static int calcDiff(int n) {
        // 拆分4位数字,不足四位前面补0
        char[] arr = String.format("%04d", n).toCharArray();

        // 升序排序:最小数
        Arrays.sort(arr);
        int min = Integer.parseInt(new String(arr));

        // 反转数组得到降序:最大数
        reverseArr(arr);
        int max = Integer.parseInt(new String(arr));

        return max - min;
    }

    /**
     * 字符数组反转
     */
    public static void reverseArr(char[] arr) {
        int left = 0, right = arr.length - 1;
        while (left < right) {
            char temp = arr[left];
            arr[left] = arr[right];
            arr[right] = temp;
            left++;
            right--;
        }
    }
}

题目信息

题号:8034
题型:简答题
知识点:Java
难度:普通