验证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--;
}
}
}