前端外刊评论 2018-02-27
简单模拟。详解见另一篇博客。
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 }