方法1:
#include<iostream>
#include<stdio.h>
#include<algorithm>
bool cmp(int a,int b){
return a>b;
}
using namespace std;
int main(){
int N;
cin>>N;
int s1[4];
int s2[4];
int t = N;
int index = 4;
while(index--){
if(t!=0){
s1[index] = t%10;
s2[index] = s1[index];
t= t/10;
}
else{
s1[index] = 0;
s2[index] = 0;
}
}
bool flag =true;
int num1,num2;
while(flag){
sort(s1,s1+4,cmp);
num1 = s1[0]*1000+s1[1]*100+s1[2]*10+s1[3];
sort(s2,s2+4);
num2 = s2[0]*1000+s2[1]*100+s2[2]*10+s2[3];
printf("%04d - %04d = %04d\n",num1,num2,num1-num2);
num1 =num1-num2;
if(num1==0||num1==6174){
flag = false;
}
int t = num1;
index = 4;
while(index--){
if(t!=0){
s1[index] = t%10;
s2[index] = s1[index];
t= t/10;
}
else{
s1[index] = 0;
s2[index] = 0;
}
}
}
return 0;
}
方法二:
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
bool cmp(int a,int b){
return a>b;
}
int main(){
int N;
cin>>N;
int s1[4];
int s2[4];
int t = N;
int index = 4;
while(index--){
if(t!=0){
s1[index] = t%10;
s2[index] = s1[index];
t= t/10;
}
else{
s1[index] = 0;
s2[index] = 0;
}
}
bool flag =true;
while(flag){
sort(s1,s1+4,cmp);
sort(s2,s2+4);
cout<<s1[0]<<s1[1]<<s1[2]<<s1[3]<<" - "<<s2[0]<<s2[1]<<s2[2]<<s2[3]<<" = ";
for(int i = 3;i>=0;i--){
if(s1[i]<s2[i]){
s1[i] = s1[i] + 10 -s2[i];
s1[i-1]--;
s2[i] =s1[i];
}
else{
s1[i] = s1[i] -s2[i];
s2[i] =s1[i];
}
}
cout<<s1[0]<<s1[1]<<s1[2]<<s1[3]<<endl;
flag =!(s1[0]==0&&s1[1]==0&&s1[2]==0&&s1[3]==0)&&!(s1[0]==6&&s1[1]==1&&s1[2]==7&&s1[3]==4);
}
return 0;
}