1069 The Black Hole of Numbers
题意
给定一个 4
位的数字,对其每位数字进行降序操作得到数字 a
,对其每位数字进行升序操作得到数字 b
,将 a-b
得到数字 c
,如果 c
等于 6174
,那么后续进行上述操作得到数字会一直会 6174
,这个数字就被称为数字黑洞。
现在需要我们写出上述的计算过程,例如给定一个数字 6767
,其计算过程如下:
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
另外,如果 a-b
等于 0
则输出 a - b = 0000
,并停止后续计算。
思路
我们只需按照上述要求进行模拟操作即可,具体思路如下:
- 将得到的
4
位数字用数组存起来,方便进行操作。 - 对数组按照升序排序,并将数组中的数字还原成
4
位数字得到数字a
。 - 对排序后的数组反向还原出
4
为数字得到数字b
。 - 输出
b-a
的计算结果。
代码
#include<bits/stdc++.h>
using namespace std;
//进行一次计算操作
vector<int> get(int n)
{
int nums[4];
//将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];
//获得降序数字
int b = 0;
for (int i = 3; i >= 0; i--) b = b * 10 + nums[i];
return { b,a };
}
int main()
{
int n;
cin >> n;
do {
auto 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;
}