1019. 数字黑洞

前端外刊评论 2018-02-27

题目截图:

1019. 数字黑洞

思路:

简单模拟。详解见另一篇博客。

代码:

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 }

相关推荐