数字黑洞6174

6174问题

1949年印度数学家D. R. Kaprekar 研究出- -种四位数的

变换:任意列出4个自然数(不能全部相同,如1111、2222),把这四个数字组成的最大四位数与最小四位数相减,得到的四个数字再用相同方式相减法(不足四位补0),几轮减下来最后得到的数字-一定是6174。来人们把这个问题称为‘6174 问题’或'Kaprekar变幻’。

比如:

5200一0025 = 5175

7551 - 1557 = 5994

9954一4599 = 5355

5553一3555=1998

9981一1899=8082

8820一0288 = 8532

8532 - 2358 = 6174 .

7641一1467 = 6174

import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;
import java.util.stream.IntStream;

/**
 * 数字黑洞6174
 * 任意自然数,四位以内(不能是全部一样的,比如1111,2222)
 * 把他组成最大四位数和最小四位数,不足补0,把他们向减,得到新的四位数
 * 把新的四位数继续组成最大最小四位数,继续相减,依次循环,最后会得到的数字一定是 6174(这个规律也叫做kaprekar)
 */
public class demo02 {

    static String  jisuan(String num){
        int[] x = new int[]{0,0,0,0};
        String min;
        String max;
        String newNum;
        try {
            x[0]=Integer.parseInt(String.valueOf(num.charAt(0)));
            x[1]=Integer.parseInt(String.valueOf(num.charAt(1)));
            x[2]=Integer.parseInt(String.valueOf(num.charAt(2)));
            x[3]=Integer.parseInt(String.valueOf(num.charAt(3)));
        }catch (Exception e){}

        //升序
        Arrays.sort(x);
        min = x[0]+""+x[1]+""+x[2]+""+x[3];
        max = x[3]+""+x[2]+""+x[1]+""+x[0];
        newNum = String.valueOf(Integer.valueOf(max) - Integer.valueOf(min)) ;
        System.out.println(max +"-"+ min +"="+ newNum);
        return newNum;
        //Arrays.stream(x).forEach(System.out::println);

    }

    public static void main(String[] args) {
        System.out.println("请输入四位数以内的数:");
        String num = new Scanner(System.in).next();

        while (true){
            String newNum = jisuan(num);
            if(newNum.equals("6174")){
                //已经到了最后结果6174了,重复计算一遍,验算结果是不是6174
                jisuan(newNum);
                break;
            }else {
                num = newNum;
            }
        }


    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值