“数学黑洞”:任意一个4位自然数,将组成该数的各位数字重新排列,形成一个最大数和一个最小数,之后两数相减,其差仍为一个自然数。重复进行上述运算,最终会出现一个神秘的数,请编程输出这个神秘的数。
#include <stdio.h>
#define INIT 1234
#define SWAP(arr,i,j)\
{arr[i]^=arr[j];arr[j]^=arr[i];arr[i]^=arr[j];}
#define PUSHMIN(arr, i, j)\
if(arr[i]>arr[j])SWAP(arr,i,j);
#define SORTARR4(arr)\
{\
PUSHMIN(arr,0,1);\
PUSHMIN(arr,0,2);\
PUSHMIN(arr,0,3);\
PUSHMIN(arr,1,2);\
PUSHMIN(arr,1,3);\
PUSHMIN(arr,2,3);\
}
#define I2A(num,arr)\
{\
arr[0]=(num)/1000%10;\
arr[1]=(num)/100%10;\
arr[2]=(num)/10%10;\
arr[3]=(num)%10;\
}
#define A2II(arr,num)\
num=arr[0]*1000+arr[1]*100+arr[2]*10+arr[3];
#define A2ID(arr,num)\
num=arr[3]*1000+arr[2]*100+arr[1]*10+arr[0];
int main(int argc, const char *argv[])
{
unsigned int cur = 1234, prev = 0;
unsigned int max, min;
unsigned char arr[4];
while (1)
{
prev = cur;
I2A(cur,arr);
SORTARR4(arr);
A2ID(arr,max);
A2II(arr,min);
cur = max - min;
if (prev == cur)
{
printf("%d\n", cur);
break;
}
}
return 0;
}
最后求出这个黑洞数是6174