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.
Each input file contains one test case which gives a positive integer N in the range (0,104).
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.
6767
- 7766 - 6677 = 1089
- 9810 - 0189 = 9621
- 9621 - 1269 = 8352
- 8532 - 2358 = 6174
2222
2222 - 2222 = 0000
- #include
- #include
- #include
- using namespace std;
- int a[4], b[4];
-
- int main() {
- int n, t, x = 0, y = 0;
- cin >> n;
- do {
- x = 0, y = 0;
- a[0] = n % 10;
- a[1] = n / 10 % 10;
- a[2] = n / 100 % 10;
- a[3] = n / 1000;
- t = a[0];
- if (a[0] == t && a[1] == t && a[2] == t && a[3] == t) {
- cout << n << " - " << n << " = 0000";
- return 0;
- }
- for (int i = 0; i < 4; i++) {
- b[i] = a[i];
- }
- sort(a, a + 4);
- sort(b, b + 4, greater<int>());
- for (int i = 0; i < 4; i++) {
- x = x * 10 + a[i];
- y = y * 10 + b[i];
- }
- cout << b[0] << b[1] << b[2] << b[3] << " - " << a[0] << a[1] << a[2] << a[3] << " = " << setfill('0') << setw(
- 4) << y - x << endl;
- n = y - x;
- } while (n != 6174);
- return 0;
- }