PAT B1019 -- 數字黑洞

牛客網PAT乙級第九題,數字黑洞,題目描述大致如下:

輸入一個(0,10000]區間的正整數N,對於一個各位數字不完全相同的四位正整數,如果先非遞增排序,後非遞減排序,然後用第一個數字減第二個數字,將得到一個新的數字,一直重複這麼做會得到一個常數6174(Kaprekar常數)。

輸出如果N的四位數字均相等,則輸出"M - N = 0000"; 否則將計算每一步在一行中的輸出,直到6174作爲差出現,每行中間無空格,每個數字按照4位數格式輸出。


題目給出的輸入輸出格式如下:



代碼如下:

#include <iostream>
#include <algorithm>

using namespace std;

int big, small;
int GetNumbers(int x)
{
	int a[4];
	a[0] = x / 1000;
	a[1] = x / 100 % 10;
	a[2] = x / 10 % 10;
	a[3] = x % 10;
	sort(a, a + 4);
	big = a[3] * 1000 + a[2] * 100 + a[1] * 10 + a[0];
	small = a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3];
	return 0;
}
int main()
{
	int number, result;
	while (cin >> number)
	{
		GetNumbers(number);
		if (big == small)
		{
			printf("%04d - %04d = 0000\n", big, small);
			//cout << big << " - " << small << " = 0000" << endl;
		}
		else
		{
			do
			{
				result = big - small;
				printf("%04d - %04d = %04d\n", big, small, result);
				//cout << big << " - " << small << " = " << result << endl;
				GetNumbers(result);
			} while (result != 6174);
		}
	}
    return 0;
}

發佈了46 篇原創文章 · 獲贊 23 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章