uTank-木头
每一个你不满意的现在,都有一个你没有努力的曾经。

【题目链接】

给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数。

例如,我们从6767开始,将得到

7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
... ...

现给定任意4位正整数,请编写程序演示到达黑洞的过程。

输入格式:

输入给出一个(0, 10000)区间内的正整数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

提交代码:

 1 #include <stdio.h>
 2 
 3 int convert(int num, int *max, int *min)
 4 {
 5     int data[10];
 6     int max_tmp, min_tmp;
 7     int i, tmp;
 8 
 9     for(i = 0; i < sizeof(data)/sizeof(data[0]); i++)
10         data[i] = 0;
11 
12     while(num != 0)
13     {
14         data[num%10]++;
15         num /= 10;
16     }
17 
18     max_tmp = min_tmp = 0;
19 
20     for(i = 0; i < 10; i++)
21     {
22         tmp = data[i];
23         while(data[i] != 0)
24         {
25             min_tmp *= 10;
26             min_tmp += i;
27             data[i] -= 1;
28         }
29         data[i] = tmp;
30     }
31     
32     for(i = 9; i >= 0; i--)
33     {
34         while(data[i] != 0)
35         {
36             max_tmp *= 10;
37             max_tmp += i;
38             data[i] -= 1;
39         }
40     }
41 
42     // 当输入的num小于1000时,则转换后的max_tmp会小于1000,
43     // 需要在该数值后面补零直到大于等于1000为止
44     while(max_tmp < 1000)
45         max_tmp *= 10;
46 
47     *max = max_tmp;
48     *min = min_tmp;
49 
50     return 0;
51 }
52 
53 int main(void)
54 {
55     int num;
56     int max, min;
57     int diff;
58 
59     scanf("%d", &num);
60 
61     convert(num, &max, &min);
62     if(max != min)
63     {
64         do{
65             diff = max - min;
66             printf("%04d - %04d = %04d\n", max, min, diff);
67             convert(diff, &max, &min);
68         }while(diff != 6174);
69     }
70     else
71     {
72         printf("%04d - %04d = %04d", max, min, max-min);
73     }
74 
75     return 0;
76 }

 

posted on 2015-08-26 10:46  uTank  阅读(246)  评论(0编辑  收藏  举报