对于任何各位数字不完全相同的四位整数,我们将该数字的四个数位按非升序排列,得到一个数字,再按非降序排列,得到另一个数字,将两个数字相减就能得到一个新的数字。
不断重复这个过程,我们就能得到数字6174 ---- 这是四位数字的黑洞。
例如,给定数字 6767,过程如下:
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
… …
给定任意一个四位数字,请你输出它进入黑洞的过程。
输入格式
包含一个正整数 NN。
注意,给定数字 NN 如果不足四位,则补充前导 00 至四位为止。
输出格式
如果 NN 的四位数字都相同,则输出一行 N - N = 0000。
否则,每行输出一个操作步骤,直到出现 61746174 作为差值产生为止。
所有数字都必须输出为四位数字。
数据范围
0<N<100000<N<10000
输入样例1:
6767
输出样例1:
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
输入样例2:
2222
输出样例2:
2222 - 2222 = 0000
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> get(int n)
{
int nums[4];
for (int i = 0; i < 4; i ++ )
{
nums[i] = n % 10;
n /= 10;
}
sort(nums, nums + 4);
int a = 0;
for (int i = 0; i < 4; i ++ ) a = a * 10 + nums[i];
reverse(nums, nums + 4);
int b = 0;
for (int i = 0; i < 4; i ++ ) b = b * 10 + nums[i];
return {b, a};
}
int main()
{
int n;
cin >> n;
do
{
vector<int> t = get(n);
printf("%04d - %04d = %04d\n", t[0], t[1], t[0] - t[1]);
n = t[0] - t[1];
} while (n && n != 6174);
return 0;
}