#include<cstdio>
#include<algorithm>
using namespace std;
bool cmp(int a, int b)
{
return a > b;
}
int min(int x)
{
int a[6];
int sum = 0;
for (int i = 0; i < 4; i++)
{
a[i] = x % 10;
x /= 10;
}
sort(a, a + 4);
for (int i = 0; i < 4; i++)
{
sum = sum * 10 + a[i];
}
return sum;
}
int max(int x)
{
int a[6];
int sum = 0;
for (int i = 0; i < 4; i++)
{
a[i] = x % 10;
x /= 10;
}
sort(a, a + 4,cmp);
for (int i = 0; i < 4; i++)
{
sum = sum * 10 + a[i];
}
return sum;
}
int main()
{
int n;
scanf("%d", &n);
int a = max(n);
int b = min(n);
int x = a - b;
while (x!= 6174&& x != 0)//这里是&&而不是||
{
printf("%04d - %04d = %04d\n", a, b, x);
a = max(x);
b = min(x);//这里必须要写成x,如果写成min(a-b)最后的结果会出现偏差,然后结果会出错
x = a - b;
}
printf("%04d - %04d = %04d\n", a, b, x);
return 0;
}
小结:这题的思路很简单,但是确实浪费了我很长时间,首先是while的判断的地方,自己逻辑混乱了,然后就是max和min那里,必须要先把a-b算出来,再放到式子里面,具体的原因我还不是很明白