我的代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
bool cmp(int a, int b)
{
return a > b;
}
int main()
{
int a, res[10];
cin >> a;
if (a == 6174) printf("7641 - 1467 = 6174\n");
int z = a;
int j = 0;
while (z)
{
res[j ++ ] = z % 10;
z /= 10;
}
bool flag = false;
for (int n = 0; n < j; n ++ )
if (res[n] != res[0])
{
flag = true;
break;
}
memset(res, 0, sizeof res);
if (!flag) printf("%d - %d = 0000", a, a);
else
{
while (a != 6174)
{
int i = 0, x, y;
while (a)
{
res[i ++ ] = a % 10;
a /= 10;
}
sort(res, res + 4, cmp);
x = res[0] * 1000 + res[1] * 100 + res[2] * 10 + res[3];
y = res[3] * 1000 + res[2] * 100 + res[1] * 10 + res[0];
a = x - y;
printf("%04d - %04d = %04d\n", x, y, a);
memset(res, 0, sizeof res);
}
}
return 0;
}
#include<iostream>
#include<string.h> //string
#include<algorithm> //sort
#include<math.h> //pow
using namespace std;
int main()
{
string str;
int a[4]={0,0,0,0};
int d=0,x=0,cha=0; //较大值 较小值初始化 输入值
cin>>str;
int len=str.length();
for(int i=0;i<len;i++){
a[i]=str[i]-'0';
}
if (a[1]==a[2]&&a[2]==a[3]&&a[3]==a[0]) {
cout<<str<<" - "<<str<<" = "<<"0000"; //这样写如果0000不带引号的话,第一个测试点错误
// printf("%04d - %04d = %04d\n",a[0]*1111,a[0]*1111,0);
}
else{
while(cha!=6174)
{
sort(a,a+4,greater<int>());
for(int i=0;i<4;i++){
d=10*d+a[i];
x=10*x+a[3-i]; //注意789 应该表示为0789
}
cha= d-x;
// cout<<d<<" - "<<x<<" = "<<cha<<endl; //可能是3210-123 格式错误
printf("%04d - %04d = %04d\n",d,x,cha);
a[3]=cha%10;
a[2]=(cha/10)%10;
a[1]=(cha/100)%10;
a[0]=cha/1000;
d=0;
x=0;
}
}
return 0;
}