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

相关推荐
_李小白4 分钟前
【OSG学习笔记】Day 39: NodeCallback(帧回调机制)
java·笔记·学习
如来神掌十八式6 分钟前
设计模式之装饰器模式
java·设计模式
cch891813 分钟前
C++、Python与汇编语言终极对比
java·开发语言·jvm
好家伙VCC24 分钟前
**InfluxDB实战进阶:基于Golang的高性能时序数据采集与可视化方
java·开发语言·后端·python·golang
斌味代码24 分钟前
Java SpringBoot 微服务实战:企业级架构设计与性能调优完全指南
java·spring boot·微服务
好家伙VCC25 分钟前
**发散创新:基于Go语言的服务网格实践与流量治理实战**在微服务架构日益复杂的今天,**服务网格(S
java·python·微服务·架构·golang
一定要AK9 小时前
Spring 入门核心笔记
java·笔记·spring
A__tao9 小时前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch
KevinCyao9 小时前
java视频短信接口怎么调用?SpringBoot集成视频短信及回调处理Demo
java·spring boot·音视频
迷藏4949 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源