1019 数字黑洞
/**
* 1.insert:basic_string& insert( size_type index, size_type count, CharT ch );
* 在index位置插入count个字符ch
* 本题中:s.insert(0, 4 – s.length(), ‘0’);用来给不足4位的时候前面补0
*
* 2. do while() : 如果当输入N值为6174的时候,依旧要进行下面的步骤,直到差值为6174才可以
* 所以用do while语句,无论是什么值总是要执行一遍while语句,直到遇到差值是0000或6174
*
* 3.sort():在没有排序方法的时候,默认从小到大排序
* sort(a.begin(), a.end(), cmp); 把s从大到小排序
* sort(b.begin(), b.end()); 把s从小到大排序
*
* 4.stoi():返回转换后的整数
* int result = stoi(a) - stoi(b);
*
* 5.参考博客:https://www.liuchuo.net/archives/541
*/
#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(char a, char b) {return a > b;}
int main() {
string s;
cin >> s;
s.insert(0, 4 - s.length(), '0');
do {
string a = s, b = s;
//从大到小排序
sort(a.begin(), a.end(), cmp);
//在没有排序方法的时候,默认从小到大排序
sort(b.begin(), b.end());
//stoi():返回转换后的整数
int result = stoi(a) - stoi(b);
s = to_string(result);
s.insert(0, 4 - s.length(), '0');
cout << a << " - " << b << " = " << s << endl;
} while (s != "6174" && s != "0000");
return 0;
}