# include <iostream>
# include <vector>
# include <algorithm>
# include <functional>
using namespace std;
string strnum;
string str1;
string str2;
string strnumMinus(string str1, string str2)
{
int num1, num2;
int rst;
string strrst;
num1 = stoi(str1.c_str());
num2 = stoi(str2.c_str());
rst = num1 - num2;
strrst = to_string(rst);
int numofzero = 4 - strrst.size(); // 要补几个0
for(int i=0;i<numofzero;++i){
strrst = "0" + strrst;
}
return strrst;
}
int main()
{
cin >> strnum;
// 输入给出一个……正整数 N 所以要补0
int numofzero = 4 - strnum.size(); // 要补几个0
for(int i=0;i<numofzero;++i){
strnum = "0" + strnum;
}
if(strnum[0] == strnum[1] && strnum[1] == strnum[2] && strnum[2] == strnum[3]){
cout << strnum << " - " << strnum << " = " << "0000" << endl;
return 0;
}
// 写dowhile是为了防止输入是6174的情况
do
{
str1 = str2 = strnum;
sort(str1.begin(), str1.end(), greater<char>());
sort(str2.begin(), str2.end());
cout << str1 << " - " << str2 << " = ";
strnum = strnumMinus(str1, str2);
cout << strnum << endl;
}while(strnum != "6174" || strnum == "0");
return 0;
}
下午写的,晚上修改了一下
printf在%04d不够位数可以补0,方便很多
# include <iostream>
# include <vector>
# include <algorithm>
# include <functional>
using namespace std;
string strnum, str1, str2;
int num, num1, num2;
int main()
{
cin >> num;
while(1)
{
strnum = to_string(num);
// 补0
int numofzero = 4 - strnum.size();
for(int i=0;i<numofzero;++i)
strnum = "0" + strnum;
str1 = str2 = strnum;
sort(str1.begin(), str1.end(), greater<char>());
sort(str2.begin(), str2.end());
num1 = stoi(str1.c_str());
num2 = stoi(str2.c_str());
num = num1 - num2;
printf("%04d - %04d = %04d\n", num1, num2, num);
// 控制循环结束(num ==0 是为了2222 - 2222 = 0这种情况)
if(num ==0 || num == 6174)break;
}
return 0;
}