A1069/B1019 PAT甲级JAVA题解 The Black Hole of Numbers
For any 4-digit integer except the ones with all the digits being the same, if we sort the digits in non-increasing order first, and then in non-decreasing order, a new number can be obtained by takin
For any 4-digit integer except the ones with all the digits being the same, if we sort the digits in non-increasing order first, and then in non-decreasing order, a new number can be obtained by taking the second number from the first one. Repeat in this manner we will soon end up at the number 6174 -- the black hole of 4-digit numbers. This number is named Kaprekar Constant.
For example, start from 6767, we'll get:
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
... ...
Given any 4-digit number, you are supposed to illustrate the way it gets into the black hole.
Input Specification:
Each input file contains one test case which gives a positive integer N in the range (0,104).
Output Specification:
If all the 4 digits of N are the same, print in one line the equation N - N = 0000. Else print each step of calculation in a line until 6174 comes out as the difference. All the numbers must be printed as 4-digit numbers.
Sample Input 1:
6767
Sample Output 1:
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
Sample Input 2:
2222
Sample Output 2:
2222 - 2222 = 0000
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws Exception{
Scanner sc = new Scanner(System.in);
String s1=sc.next();
char[] n=String.format("%04d", Integer.parseInt(s1)).toCharArray();
String min=CacuMinandMax(n, 1);
String max=CacuMinandMax(n, 2);
int cha=Integer.parseInt(max)-Integer.parseInt(min);
String res=bu(cha);
System.out.println(max+" - "+min+" = "+res);
while(cha!=6174&&cha!=0) {
// 补全res为四位数字
min=CacuMinandMax(res.toCharArray(), 1);
max=CacuMinandMax(res.toCharArray(), 2);
cha=Integer.parseInt(max)-Integer.parseInt(min);
res=bu(cha);
System.out.println(max+" - "+min+" = "+res);
}
}
// 根据字符数组算出最大最小值
private static String CacuMinandMax(char[] n,int flag) {
Arrays.sort(n);
String min=new String(n);
StringBuilder max = new StringBuilder();
for(int i=n.length-1;i>=0;i--) {
max.append(n[i]);
}
if(flag==1) {
return min;
}else {
return max.toString();
}
}
private static int Cacu(int cha) {
if(cha==0) return 1;
int ans=0;
while(cha!=0) {
cha=cha/10;
ans++;
}
return ans;
}
private static String bu(int num) {
int d=Cacu(num);
return String.format("%04d", num);
}
}
更多推荐


所有评论(0)