题目截图:

思路:
简单模拟。详解见另一篇博客。
代码:
1 /*
2 1019. 数字黑洞
3 */
4
5 #include <stdio.h>
6 #include <string.h>
7 #include <math.h>
8 #include <stdlib.h>
9 #include <time.h>
10
11 int cmp1(const void* a, const void* b) { // 从小到大排序
12 return *(int*)a-*(int*)b;
13 }
14
15 int cmp2(const void* a, const void* b) { // 从大到小排序
16 return *(int*)b-*(int*)a;
17 }
18
19 void to_array(int n, int num[]) { // int 型整数转换成 int 型数组
20 int i;
21 for(i=0; i<4; ++i) {
22 num[i] = n%10;
23 n /= 10;
24 }
25 }
26
27 int to_number(int num[]) { // int 型数组转换成 int 型整数
28 int i, sum = 0;
29 for(i=0; i<4; ++i) {
30 sum = sum*10 + num[i];
31 }
32 return sum;
33 }
34
35 int main() {
36 int n, MAX, MIN; // int 型整数,最大值,最小值
37 scanf("%d", &n);
38 int num[4]; // int 型数组
39 while(1) {
40 to_array(n, num);
41 qsort(num, 4, sizeof(int), cmp1); // 递增排序
42 MIN = to_number(num); // 递增序列转为最小值
43 qsort(num, 4, sizeof(int), cmp2); // 递减排序
44 MAX = to_number(num); // 递减序列转为最大值
45 n = MAX - MIN; // 得到下一个数
46 // 格式化输出
47 printf("%04d - %04d = %04d\n", MAX, MIN, n);
48 if(n==0 || n==6174) break;
49 }
50
51 return 0;
52 }
转载于:https://www.cnblogs.com/coderJiebao/p/PAT1019.html