你好!
不考虑性能的写了段代码······
import java.util.Arrays;
public class Test{
//计算次数
static int count = 0;
//计算结果
static int result = -1;
public static void main(String[] args){
int m = 5556;
int cnt = VerifyKabulekeTheorem(m);
System.out.format( "%d 得到6174卡布列克常数的计算步骤为 %d 步!%n",m,cnt);
}
static int VerifyKabulekeTheorem(int m){
//临时正序数组,即最小4位数
int[] tmpAsc = new int[4];
//临时倒序数组,即最大4位数
int[] tmpDesc = new int[4];
//由m计算出的数组
int[] arr = new int[4];
//计算千位
arr[0] = m / 1000;
//计算百位
arr[1] = (m % 1000) / 100;
//计算十位
arr[2] = (m % 100) / 10;
//计算个位
arr[3] = m % 10;
//将由m计算得出的数组赋值给正序数组(此时未排序)
tmpAsc = arr;
//从小到大排序
Arrays.sort(tmpAsc);
//从大到小排序
for(int j=arr.length;j>0;j--){
tmpDesc[arr.length-j] = tmpAsc[j-1];
}
//分别得到最大4位数和最小4位数字符串
String maxStr = Arrays.toString(tmpDesc).replace("[","").replace("]","").replace(",","").replace(" ","");
String minStr = Arrays.toString(tmpAsc).replace("[","").replace("]","").replace(",","").replace(" ","");
//将最大4位数和最小4位数字符串转为整型数字
int maxNum = Integer.parseInt(maxStr);
int minNum = Integer.parseInt(minStr);
//结果不为6174将结果传入自身方法,进入递归调用
while(result!=6174){
result = maxNum - minNum;
count ++;
VerifyKabulekeTheorem(result);
}
return count;
}
} 本回答被提问者采纳