1069 The Black Hole of Numbers (20)(20 分)
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
注意点:在求每一位数的时候,用来保存数字的数组一定要是4位的,并且赋初值, 否者会因为减法出现的三位数,而导致死循环
1 #include<iostream> 2 #include<vector> 3 #include<algorithm> 4 using namespace std; 5 int main(){ 6 int n, i; 7 cin>>n; 8 while(true){ 9 int cnt=0, mmax=0, mmin=0; 10 vector<int> v(4,0); 11 while(n){ 12 v[cnt++]=n%10; 13 n/=10; 14 } 15 sort(v.begin(), v.end()); 16 for(i=0; i<v.size(); i++){ 17 mmin = mmin*10 + v[i]; 18 mmax = mmax*10 + v[3-i]; 19 } 20 printf("%04d - %04d = %04d ", mmax, mmin, mmax-mmin); 21 n=mmax-mmin; 22 if(mmax-mmin==6174||n==0) break; 23 } 24 return 0; 25 }