【c++】寻找四位数的 “数字黑洞”

870 阅读1分钟

这是我参与8月更文挑战的第1天,活动详情查看:8月更文挑战

大家好,我是孙不坚1208,欢迎关注我的博客。

数字黑洞

“数学黑洞”:

任意一个4位自然数,将组成该数的各位数字重新排列,形成一个最大数和一个最小数,

之后两数相减,其差仍为一个自然数。

重复进行上述运算,会发现一个神秘的数。

描述

输入: 一个4位的自然数。

输出: 从该4位自然数开始,每次按题意变换后的自然数,直到数学黑洞为止。

案例

输入样例 : 7700 输出样例 :

7700 7623 5265 3996 6264 4176 6174

c++代码如下

#include <iostream>
using namespace std;
int main()
{
	int n, a, b, c, d;
	cin >> n;
	cout << n << endl;
	while(n != 6174)
	{
		a = n / 1000;
		b = n / 100 % 10;
		c = n / 10 % 10;
		d = n % 10;
		if(a < b)
			a ^= b ^= a ^= b;
		if(a < c)
			a ^= c ^= a ^= c;
		if(a < d)
			a ^= d ^= a ^= d;
		if(b < c)
			b ^= c ^= b ^= c;
		if(b < d)
			b ^= d ^= b ^= d;
		if(c < d)
			c ^= d ^= c ^= d;
		n = a * 1000 + b * 100 + c * 10 + d -
			(a + b * 10 + c * 100 + d * 1000);
		if(n < 10)
			cout << "000" << n << endl;
		else if(n < 100)
			cout << "00" << n << endl;
		else if(n < 1000)
			cout << "0" << n << endl;
		else
			cout << n << endl;
		}
	return 0;
}

欢迎订阅专栏 我哎算法 , 希望能给需要的朋友带来方便,同时也希望能得到大家的关注与支持。