牛客網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;
}