本文主要是介绍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;
}
这篇关于PAT B1019 -- 数字黑洞的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!