Kaprekar 7641 - 1467= 6174

复制代码
package homework;

import java.util.Arrays;

import util.StringUtil;

/**
 * 
数学黑洞数6174,即卡普雷卡尔(Kaprekar)常数,
它的算法如下:
取任意一个4位数(4个数字均为同一个数的除外),
将该数的4个数字重新组合,形成可能的最大数和可能的最小数,再即将两者之间的差求出来;
对此差值重复同样过程,最后总是到达卡普雷卡尔黑洞6174,到达这个黑洞最多需要7个步骤.
例如:取1、2、3、4这4个数
大数:取这4个数字能构成的最大数,本例为4321;
小数:取这4个数字能构成的最小数,本例为:1234;
差:求出大数与小数之差,本例为:4321-1234=3087;
重复:对新数3087按以上算法求得新数为8730-0378=8352;
重复:对新数8352按以上算法求得新数为8532-2358=6174;
结论:对任何只要不是4位数字全相同的4位数,按上述算法,不超过7次激素,最终结果多无法逃出6174黑洞.
从文本框Text1中输入一个任意的数字不完全相同的四位正整数,在文本框Text2中输出掉进黑洞的步骤次数.
 *
 * Kaprekar 7641 - 1467= 6174
 *
 * @author ZengWenFeng
 * @date 2023.11.03
 * @email 117791303@qq.com
 * @mobile 13805029595
 */
public class Math_2023_11_03_Kaprekar
{

	public Math_2023_11_03_Kaprekar()
	{

	}

	public static String calc(String num)
	{
		if (num == null || num.length() != 4)
		{
			return "-1";
		}

		char[] arrChar = num.toCharArray();
		Arrays.sort(arrChar);
		System.out.println(arrChar);

		String strMin = new String(arrChar);
		System.out.println("strMin : " + strMin);
		String strMax = new StringBuilder(strMin).reverse().toString();
		System.out.println("strMax : " + strMax);

		int min = Integer.parseInt(strMin);
		int max = Integer.parseInt(strMax);
		int result = max - min;

		System.out.println(" max - min = " + strMax + " - " + strMin + " = " + result);

		if (result == 0)
		{
			return "0";
		}
		else
		{
			String strResult = Integer.toString(result);

			// 不足四位数,补前导"0"
			if (strResult.length() <= 4)
			{
				return StringUtil.getZeroStr(4 - strResult.length()) + strResult;
			}
			//
			else
			{
				return strResult;
			}
		}
	}

	public static void main(String[] args)
	{
		String num = "888823";
		System.out.println(num);

		int cnt = 0;
		while (true)
		{
			String temp = calc(num);
			cnt++;

			if (temp.equals("6174"))
			{
				calc(temp);
				break;
			}
			else if (temp.equals("0"))
			{
				System.err.println("输入值[" + num +  "]不能是4位相同数!");
				break;
			}
			else if (temp.equals("-1"))
			{
				System.err.println("输入值[" + num +  "]不是四位数!");
				break;
			}
			else
			{
				num = temp;
			}
		}

		System.out.println("cnt : " + cnt);
	}

}

2023.11.03 homework-CSDN博客

相关推荐
像我这样帅的人丶你还12 小时前
Java 后端详解(四):分页与搜索
java·javascript·后端
她的男孩12 小时前
数据权限为什么不能只靠注解?Forge 的 Mapper 层 SQL 改写源码拆解
java·后端·架构
tntxia13 小时前
Mybatis的日志输入
java
亦暖筑序14 小时前
Java 8老系统Browser Agent实战:三层拦截把AI操作后台变成可审计流程
java·后端·设计模式
用户2986985301417 小时前
Java 实现 Word 文档加密与权限解除
java·后端
Yeats_Liao18 小时前
14:Servlet中的页面跳转-Java Web
java·后端·架构
未秃头的程序猿18 小时前
告别"if-else地狱"!Java 21模式匹配,代码优雅了10倍
java·后端·面试
鹤望兰67518 小时前
字节跳动国际支付-后端开发-三面面经
java
Flittly19 小时前
【AgentScope Java新手村系列】(14)人机交互
java·spring boot·spring
RainCity19 小时前
Java Swing 自定义组件库分享(十二)
java·笔记·后端