//卡布列卡猜想
//输入一个四位数(由不完全相同的四个数字组成)→一个最大数(逆序)一个最小数(正序)
//大减小得到差,对差重复操作
//若不够四位数用零补齐
//不完全相同--num%1111!=0即可
#include<stdio.h>
int GetMax(int x) { //冒泡得到逆序
int maxnum,i,change,temp,a[4]= {0}; //小于1000的用0补位
i=0;
change=1;
while(x!=0) {//把四个位置分离出来存到数组里
a[i]=x%10;
x=x/10;
i++;
}
while(change) {//冒泡排序
change=0;
for(i=0; i<3; i++) {
if(a[i]<a[i+1]) {
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
change=1;//发生交换
}
}
}
maxnum=a[0]*1000+a[1]*100+a[2]*10+a[3];
return maxnum;
}
int main() {
int num,b[4],i,temp,max,min;
scanf("%d",&num);
while(num%1111==0||num>9999||num<0) {
printf("输入一个由不完全相同的四个数字组成的四位数:");
scanf("%d",&num);
}
while(num!=6174) {
max=GetMax(num);
temp=max;
i=0;
while(temp!=0){
b[i]=temp%10;
temp=temp/10;
i++;
}
min=b[0]*1000+b[1]*100+b[2]*10+b[3];
num=max-min;
//printf("%4d-%4d=%4d\n",max,min,num);
printf("%4d-",max);
for(i=0;i<4;i++){
printf("%d",b[i]);
}
printf("=%4d\n",num);
}
return 0;
}