http://www.patest.cn/contests/pat-a-practise/1069
For any 4-digit integer except the ones with all the digits being the same, if we sort the digits in non-increasing order first, and then in non-decreasing order, a new number can be obtained by taking the second number from the first one. Repeat in this manner we will soon end up at the number 6174 -- the "black hole" of 4-digit numbers. This number is named Kaprekar Constant.
For example, start from 6767, we'll get:
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
... ...
Given any 4-digit number, you are supposed to illustrate the way it gets into the black hole.
Input Specification:
Each input file contains one test case which gives a positive integer N in the range (0, 10000).
Output Specification:
If all the 4 digits of N are the same, print in one line the equation "N - N = 0000". Else print each step of calculation in a line until 6174 comes out as the difference. All the numbers must be printed as 4-digit numbers.
Sample Input 1:6767Sample Output 1:
7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174Sample Input 2:
2222Sample Output 2:
2222 - 2222 = 0000
//17:35 -18:04 #include <stdio.h> #include <math.h> int same[10] = {0000,1111,2222,3333,4444,5555,6666,7777,8888,9999}; int isSame(int n){ return n == same[n%10]; } void f(int n,int* n1,int* n2){ int t[4],i,j,tmp; for(i = 0;i < 4;i++){ t[i] = n % 10; n = n / 10; } for(i = 0;i < 4;i++){ for(j = 0;j < 3 - i;j++){ if(t[j] > t[j+1]){ tmp = t[j]; t[j] = t[j+1]; t[j+1] = tmp; } } } (*n1) = (*n2) = 0; for(i = 0;i < 4;i++){ (*n2) += t[i] * (int)pow(10,3-i); (*n1) += t[i] * (int)pow(10,i); } } int t(){ int n,n1,n2,diff; scanf("%d",&n); if(isSame(n)){ printf("%04d - %04d = 0000\n",n,n); } else{ f(n,&n1,&n2); diff = n1 - n2; while(diff != 6174){ printf("%04d - %04d = %04d\n",n1,n2,diff); f(diff,&n1,&n2); diff = n1 - n2; } printf("%04d - %04d = %04d\n",n1,n2,diff); } return 0; } int main(){ while(1) t(); return 0; }