#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool cmp1(char a, char b)
{
return a > b;
}
int main()
{
string str;
cin >> str;
str.insert(0, 4 - str.size(), '0'); // 题目说是四位数,所以位数不够要补零 输入11 补零后 str="0011"
string max = str;
string min = str;
sort(max.begin(), max.end(), cmp1); // 定义的cmp1函数 使其升序
sort(min.begin(), min.end()); // sort 默认排序降序
int result = stoi(max) - stoi(min); // 两者之差 stoi(字符串,起始位置,n进制),将n进制的字符串转化为十进制 默认从位置0开始,进制为十进制
while (result != 6174 || max == min)
{
if (max == min) // 如果是max=min 即四位数字相同 输出 N - N = 0000
{
cout << max << " - " << min << " = "
<< "0000" << endl;
break; // 跳出循环
}
cout << max << " - " << min << " = "; // 输出格式 比如1000-0001 输出0999 使用printf在前面补0
printf("%04d", result);
cout << endl;
string mid; // 定义一个中间量 作为过渡
mid = to_string(result); // to_string 把int类型的数字常量变成字符串类型
mid.insert(0, 4 - mid.size(), '0'); // 前面用printf输出是0999 但result实际还是999 所以还是要补0
max = mid; // 将得到的字符串同输入的字符串进行一样的操作 进行判断
min = mid;
sort(max.begin(), max.end(), cmp1);
sort(min.begin(), min.end());
result = stoi(max) - stoi(min);
}
if (max != min) // 当result=6174时 已经跳出了while循环 所有最后还得输出一次
{
cout << max << " - " << min << " = " << stoi(max) - stoi(min) << endl;
}
system("pause");
return 0;
}
PTA 乙级 B1019 数字黑洞 C++
最新推荐文章于 2024-09-01 21:55:24 发布