1069. The Black Hole of Numbers (20)
时间限制
100 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue
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:
6767
Sample Output 1:
7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174
Sample Input 2:
2222
Sample Output 2:
2222 - 2222 = 0000
提交代码
1 #include<cstdio> 2 #include<stack> 3 #include<cstring> 4 #include<iostream> 5 #include<stack> 6 #include<set> 7 #include<map> 8 using namespace std; 9 int dight[4]; 10 int main() 11 { 12 //freopen("D:\\INPUT.txt","r",stdin); 13 int n,maxnum,minnum; 14 scanf("%d",&n); 15 int i,j; 16 do{//有可能n一开始就是6174 17 for(i=3; i>=0; i--) 18 { 19 dight[i]=n%10; 20 n/=10; 21 } 22 for(i=0; i<4; i++)//由大到小 23 { 24 maxnum=i; 25 for(j=i+1; j<4; j++) 26 { 27 if(dight[j]>dight[maxnum]) 28 { 29 maxnum=j; 30 } 31 } 32 int t=dight[maxnum]; 33 dight[maxnum]=dight[i]; 34 dight[i]=t; 35 } 36 minnum=0; 37 for(i=3; i>=0; i--) 38 { 39 minnum*=10; 40 minnum+=dight[i]; 41 } 42 maxnum=0; 43 for(i=0; i<4; i++) 44 { 45 maxnum*=10; 46 maxnum+=dight[i]; 47 } 48 n=maxnum-minnum; 49 printf("%04d - %04d = %04d\n",maxnum,minnum,n); 50 if(!n) 51 break; 52 }while(n!=6174); 53 return 0; 54 }