原题链接
题面
思路
就是以字符串的形式读入,通过sort
排序来实现升序排和降序排,通过string
+ insert
的方式补全占位的 0。
坑点
就是一个数字不足四位时,必须要先在前面用 0 占位,但是翻转时,必须要带上前面补充的 0 一起翻转,比如 1
,0001
,翻转后是1000
。
代码
#include<bits/stdc++.h>
using namespace std;
bool cmp(char a, char b)
{
return a > b;
}
int main()
{
string a;cin >> a;a.insert(a.begin(), 4 - a.length(), '0');while (1){
sort(a.begin(), a.end());int x = stoi(a);sort(a.begin(), a.end(), cmp);int y = stoi(a);printf("%04d - %04d = %04d\n", y, x, y - x); //输出时补全四位a = to_string(y - x);a.insert(a.begin(), 4 - a.length(), '0'); //字符串前面也要加上0,三个参数分别是 插入位置、长度、内容if (a == "6174" || a == "0000") break; //终止条件}return 0;
}
总结
细节啊,我就是因为那个坑点卡了好久直到最后都没找出来,真阴险,这题。