PAT乙级1019(JAVA)——龙哥哥的刷题路

1019 数字黑洞 (20分)
给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数。
例如,我们从6767开始,将得到
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
… …
现给定任意 4 位正整数,请编写程序演示到达黑洞的过程。

输入格式:
输入给出一个 (0,10^4) 区间内的正整数 N。

输出格式:
如果 N 的 4 位数字全相等,则在一行内输出 N - N = 0000;否则将计算的每一步在一行内输出,直到 6174 作为差出现,输出格式见样例。注意每个数字按 4 位数格式输出。

输入样例 1:
6767

输出样例 1:
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174

输入样例 2:
2222

输出样例 2:
2222 - 2222 = 0000

解题思路:利用Arrays.sort对String的char数组进行排序,然后对得到的数组拼接得到递增和递减的数字,最后再进行计算

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        String x=in.next();
        print(x);
    }
    public static void print(String x){
        int g=1;
        int l=Integer.parseInt(x);
        String h="";
        if(l<10){
            h="000"+x;
        }else if(l<100){
            h="00"+x;
        }else if(l<1000){
            h="0"+x;
        }else{
            h=x+"";
        }
        while(g!=0 && g!=6174){
            char[] str=h.toCharArray();
            Arrays.sort(str);
            int c=0,d=0;
            String e="",f="";
            for(int i=0;i<str.length;i++){
                int a=str[i]-'0';
                int b=(int)Math.pow(10,3-i);
                c=c+a*b;
                e=e+str[i];
                int j=str[3-i]-'0';
                int k=(int)Math.pow(10,3-i);
                d=d+j*k;
                f=f+str[3-i];
            }
            g=d-c;
            if(g<10){
               h="000"+g;
            }else if(g<100){
                h="00"+g;
            }else if(g<1000){
               h="0"+g;
            }else{
                h=g+"";
            }
            System.out.println(f+" - "+e+" = "+h);
        }
    }
}

发布了25 篇原创文章 · 获赞 0 · 访问量 371

猜你喜欢

转载自blog.csdn.net/qq_23079139/article/details/104085112