方法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 ;
}