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