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博客

相关推荐
有位神秘人3 分钟前
Android中Notification的使用详解
android·java·javascript
tb_first1 小时前
LangChain4j简单入门
java·spring boot·langchain4j
独自破碎E1 小时前
【BISHI9】田忌赛马
android·java·开发语言
范纹杉想快点毕业1 小时前
实战级ZYNQ中断状态机FIFO设计
java·开发语言·驱动开发·设计模式·架构·mfc
smileNicky2 小时前
布隆过滤器怎么提高误差率
java
それども2 小时前
分库分表的事务问题 - 怎么实现事务
java·数据库·mysql
Java面试题总结2 小时前
基于 Java 的 PDF 文本水印实现方案(iText7 示例)
java·python·pdf
马猴烧酒.2 小时前
【面试八股|Java集合】Java集合常考面试题详解
java·开发语言·python·面试·八股
测试工程师成长之路2 小时前
Serenity BDD 框架:Java + Selenium 全面指南(2026 最新)
java·开发语言·selenium
lang201509283 小时前
Java JSON绑定API:JSR 367详解
java·java-ee